source

C#에서 XmlNode에서 속성 값을 읽는 방법은?

factcode 2023. 9. 21. 21:32
반응형

C#에서 XmlNode에서 속성 값을 읽는 방법은?

XmlNode가 있고 "Name"이라는 속성의 값을 얻고 싶다고 가정합니다.내가 어떻게 그럴 수 있을까?

XmlTextReader reader = new XmlTextReader(path);

XmlDocument doc = new XmlDocument();
XmlNode node = doc.ReadNode(reader);

foreach (XmlNode chldNode in node.ChildNodes)
{
     **//Read the attribute Name**
     if (chldNode.Name == Employee)
     {                    
         if (chldNode.HasChildNodes)
         {
             foreach (XmlNode item in node.ChildNodes)
             { 

             }
         }
      }
}

XML 문서:

<Root>
    <Employee Name ="TestName">
    <Childs/>
</Root>

시도해 보기:

string employeeName = chldNode.Attributes["Name"].Value;

편집: 댓글에서 지적한 것처럼 속성이 존재하지 않으면 예외가 발생합니다.안전한 방법은 다음과 같습니다.

var attribute = node.Attributes["Name"];
if (attribute != null){
    string employeeName = attribute.Value;
    // Process the value here
}

Konamiman의 솔루션(모든 관련 null check 포함)을 확장하기 위해 제가 해온 일은 다음과 같습니다.

if (node.Attributes != null)
{
   var nameAttribute = node.Attributes["Name"];
   if (nameAttribute != null) 
      return nameAttribute.Value;

   throw new InvalidOperationException("Node 'Name' not found.");
}

노드를 사용하는 것처럼 모든 속성을 순환할 수 있습니다.

foreach (XmlNode item in node.ChildNodes)
{ 
    // node stuff...

    foreach (XmlAttribute att in item.Attributes)
    {
        // attribute stuff
    }
}

사용하는 경우chldNode~하듯이XmlElement대신에XmlNode, 사용가능

var attributeValue = chldNode.GetAttribute("Name");

속성 이름이 없는 경우 반환 값은 빈 문자열일 뿐입니다.

당신의 루프는 이렇게 보일 수 있습니다.

XmlDocument document = new XmlDocument();
var nodes = document.SelectNodes("//Node/N0de/node");

foreach (XmlElement node in nodes)
{
    var attributeValue = node.GetAttribute("Name");
}

이렇게 하면 모든 노드가 선택됩니다.<node>에 둘러싸인<Node><N0de></N0de><Node>태그를 실행한 후 루프를 거쳐 "이름" 속성을 읽습니다.

이름만 있으면 xpath를 사용합니다.반복 작업을 직접 수행하고 null을 확인할 필요가 없습니다.

string xml = @"
<root>
    <Employee name=""an"" />
    <Employee name=""nobyd"" />
    <Employee/>
</root>
";

var doc = new XmlDocument();

//doc.Load(path);
doc.LoadXml(xml);

var names = doc.SelectNodes("//Employee/@name");

사용하다

item.Attributes["Name"].Value;

가치를 얻기 위해서 입니다.

이 기능을 사용할 수도 있습니다.

string employeeName = chldNode.Attributes().ElementAt(0).Name

또 다른 해결책:

string s = "??"; // or whatever

if (chldNode.Attributes.Cast<XmlAttribute>()
                       .Select(x => x.Value)
                       .Contains(attributeName))   
   s =  xe.Attributes[attributeName].Value;

또한 예상되는 속성의 경우에는 예외가 발생하지 않습니다.attributeName실제로는 존재하지 않습니다.

언급URL : https://stackoverflow.com/questions/1600065/how-to-read-attribute-value-from-xmlnode-in-c

반응형