2016-12-15 18 views
0

http://api.met.no/weatherapi/locationforecast/1.9/?lat=49.8197202;lon=18.1673554 XML을 사용하려고합니다. 각 온도 요소의 모든 값 속성을 선택하고 싶습니다.C# XmlDocument 선택 노드가 공백 반환

나는 이것을 시도했다.

 const string url = "http://api.met.no/weatherapi/locationforecast/1.9/?lat=49.8197202;lon=18.1673554"; 
     WebClient client = new WebClient(); 
     string x = client.DownloadString(url); 
     XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(x); 

     XmlNodeList nodes = xml.SelectNodes("/weatherdata/product/time/location/temperature"); 
     //XmlNodeList nodes = xml.SelectNodes("temperature"); 

     foreach (XmlNode node in nodes) 
     {     
      Console.WriteLine(node.Attributes[0].Value); 
     } 

그러나 나는 항상 아무것도 얻지 못합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

문서에이 메모가 없습니다. XDocument – mybirthname

+0

도 사용하십시오. XmlDocument 클래스를 사용해야합니다. 나는 학교 프로젝트를 위해 그것을해야만한다. – gygabyte

답변

0

현재 단일 슬래시는 루트 아래 날씨 데이터를 타겟팅하지만 루트는 weatherdata입니다.

그것을 이중 슬래시를 확인하기 위해 XPath 쿼리에 선행 슬래시를 추가

XmlNodeList nodes = xml.SelectNodes("//weatherdata/product/time/location/temperature"); 

더블 슬래시 상관없이 그들이 어디에 선택과 일치하는 현재 노드에서 문서의 노드을 선택하는 XPath를 알려줍니다.

또는 선행 슬래시 제거 :

XmlNodeList nodes = xml.SelectNodes("weatherdata/product/time/location/temperature"); 

루트를 포함한 전체 경로를 찾습니다. 당신은 분명히 값이 추가라는 값을 원하기 때문에 또한

는 : node.Attributes의의 값 때문에

Console.WriteLine(node.Attributes["value"].Value); 

를 [0] .Value가 예상 순서대로하지 않을 수 있습니다.

0

각 속성을 반복하려고합니까?

foreach (XmlNode node in nodes) 
     { 
      //You could grab just the value like below 
      Console.WriteLine(node.Attributes["value"].Value); 

      //or loop through each attribute 
      foreach (XmlAttribute f in node.Attributes) 
      { 
       Console.WriteLine(f.Value); 
      } 
     } 
+0

아무 것도 없습니다. 해야만합니까? – gygabyte

+0

이 (가) 편집되었습니다. 귀하의 질문을 수정 한 것을 보았습니다. –