2017-01-16 10 views
0

이 내 XML 파일 나는 속성 이름으로 필터링하여 요소 값을 얻을 필요가C#에서 속성 이름별로 XML 노드 필터링 값을 가져 오는 방법은 무엇입니까?

<summary> 
    <testcase> 
    <result value="-45">100</result> 
    <result value="0">200</result> 
    <result value="45">300</result> 
    </testcase> 
    <testcase>  
    <result value="-45">1000</result> 
    <result value="0">2000</result> 
    <result value="45">3000</result> 
    </testcase> 
<testcase>  
    <result value="-45">0.1</result> 
    <result value="0">0.2</result> 
    <result value="45">0.3</result> 
    </testcase> 
</summary> 

의 일부입니다. 속성 = 45 그리고 대답 300,3000,0.3

XmlDocument doc = new XmlDocument(); 
doc.Load(_xmlFilePath); 
XmlNodeList nodelist = doc.SelectNodes("//testcase"); 

for (int i = 0; i < nodelist.Count; i++) 
{ 
    Double value;       
    Double.TryParse(nodelist[i].SelectSingleNode("result").Attributes["45"].InnerText, out value); 
    Console.WriteLine("value : " + value); 
} 

하지만 코드 위의 오류 메시지가 다음 제공 어디 모든 값을 얻을 필요가 예를 들어

.

개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

의견을 보내 주시면 감사하겠습니다.

감사합니다. 이것은 당신이 당신의 문제

XmlDocument doc = new XmlDocument(); 
doc.Load(_xmlFilePath); 
XmlNodeList nodelist = doc.SelectNodes("//result[@value=45]"); 
for (int i = 0; i < nodelist.Count; i++) 
{ 
    double value = double.Parse(nodelist[i].InnerText); 
    Console.WriteLine("value : " + value); 
} 

답변

3

이에 대한 트릭을 할 수있는 당신

XDocument xdc = XDocument.Load(YourXMLFile); 
var rslt = xdc.Descendants("result").Where(x => x.Attribute("value").Value == "45"); 
string rsltstr = string.Empty; 
foreach(XElement el in rslt) 
{ 
    rsltstr = rsltstr + el.Value + ", "; 
} 

또는

var rslt = xdc.Descendants("result") 
       .Where(x => x.Attribute("value").Value == "45") 
       .Select(q=>q.Value); 
0

를 해결하는 데 도움이 될 수 있습니다