2012-01-17 3 views
1

아래는 my xml 문서의 구조입니다. 난 그냥 모든 노드 의 가치를 가지고 다음 주어진 값과 비교를하고 싶습니다. 그러나 나는 C#에서 xml selectnodes를 사용하여 각 노드의 을 찾는 방법을 모르겠습니다. Google 검색 결과가 작동하지 않습니다. XML에특수 xml 구조의 name 속성 이름을 가진 요소를 선택하십시오.

<nodes>  
<node name = "node1">  
    <attribute name="a">This is node1 a</attribute> 
    <attribute name="b">This is node1 b</attribute> 
</node> 
<node name = "node2">  
    <attribute name="a">This is node2 a</attribute> 
    <attribute name="b">This is node2 b</attribute> 
</node> 
... 
</nodes>  

답변

1

를 귀하의 질문에 XML 마크 업이 전체 문서를 나타냅니다 가정하면, 당신은 할 수있다 :

XmlNodeList attrElements 
    = yourDocument.SelectNodes("/nodes/node/attribute[@name='a']"); 
3

사용 Linq에 :

XElement xml = XElement.Load("test.xml"); 
var myNodes = xml.Descendants("attribute") 
       .Where(x => x.Attribute("name").Value == "a"); 

대신 노드의 값을 검색하려면 :

var myValues = xml.Descendants("attribute") 
        .Where(x => x.Attribute("name").Value == "a") 
        .Select(x => x.Value); 
+0

consolewriteline (myvalues)를 얻고 있는지 확인하기 위해 몇 가지의 XPath 참조하기 바란다 : 내가 가진 : System.Linq.Enumerable + WhereSelectEnumerableIterator' 2 [System.Xml.Linq.XElement, System.String] – user1154138

+0

열거 형이 아닌 항목을 인쇄해야합니다. 'foreach (myValues의 var 항목) Console.WriteLine (item); – BrokenGlass

1

Linq to XML을 다음과 같이 사용하십시오 :

string xml = "<nodes>..."; 

var results = from node in XDocument.Parse(xml).Descendants() 
      where node.Name == "attribute" 
      select node.Value; 

그런 다음 필요에 따라 결과를 반복 할 수 있습니다.

멋진 Linq to XML overview here도 있습니다.

1

내 xml 구문 분석에 System.Xml.XmlDocument 클래스를 사용하고 싶습니다.

XmlDocument doc = new XmlDocument(); 
doc.load("myfilename.xml"); 
XmlNode node = doc.SelectSingleNode("\\attribute[name='a']") 

당신은 이상하게 작동하면 XPath는 문자열을 바로 http://msdn.microsoft.com/en-us/library/ms256086.aspx