2017-01-10 4 views
0

이것은 내 XML 파일입니다. 하나의 테스트 요소를 선택하고 결과 자식 노드에서 모든 속성 이름을 가져와야합니다.C#에서 선택된 XML 노드의 모든 속성 이름을 얻는 방법

<?xml version="1.0" encoding="UTF-8"?> 
<summary> 
    <test> 
    <id>test 1</id> 
    <result value="-45">330</result> 
    <result value="0">300</result> 
    <result value="45">340</result> 
    </test> 
    <test> 
    <id>test 3</id>  
    <result value="-45">330</result> 
    <result value="0">300</result> 
    <result value="45">340</result> 
    </test> 
</summary> 

나는 아래 코드를 썼다. 그러나 같은 값을 반복하면 멈추고 싶습니다.

XmlDocument xd = new XmlDocument(); 
xd.Load(_xmlFilePath); 

XmlNodeList nodelist = xd.GetElementsByTagName("result"); 

foreach (XmlNode node in nodelist) 
    { 
     string attrVal = node.Attributes["value"].Value; 
     Console.WriteLine(attrVal); 
    } 

모든 의견을 환영합니다.

감사합니다.

+0

이 유'의 값을 것으로 예상된다 무엇을 보여줄 수 nodelist'와'attrVal'의 출력 –

+0

출력은 -45,0,45가되어야합니다 – WEAPI

답변

2

당신은 XDocument 클래스

var doc = XDocument.Load(_xmlFilePath); 

var distinctResults = doc.Descendants("result") 
         .Select(element => element.Attribute("value").Value) 
         .Distinct(); 

foreach(var result in distinctResults) 
{ 
    Console.WriteLine(result); 
} 

으로 또는 다음 시도 HashSet<string>

var results = doc.Descendants("result") 
       .Select(element => element.Attribute("value").Value); 

var distinctResults = new HashSet<string>(results); 

foreach(var result in distinctResults) 
{ 
    Console.WriteLine(result); 
} 
+0

'System.Xml.XmlDocument'에 'Descendants'에 대한 정의가없고 확장 메서드가없는 'System.Xml.XmlDocument'형식의 첫 번째 인수를 허용하는 'Descendants'를 찾을 수 있음 – WEAPI

+0

[XDocument] (https : // msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v=vs.110).aspx) 클래스 대신 'XmlDocument' – Fabio

0

의 사용하여 XML로 LINQ를 사용할 수 있습니다

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication34 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 

      XDocument doc = XDocument.Load(FILENAME); 

      string id = "test 1"; 

      var results = doc.Descendants("test").Where(x => (string)x.Element("id") == id).FirstOrDefault().Elements("result").Select(x => new 
      { 
       angle = (int)x.Attribute("value"), 
       length = (int)x 
      }).ToList(); 

     } 


    } 


} 
관련 문제