2012-10-22 6 views
2

을 저장특정 XML 노드를 확인하고 다음과 같은 XML을 고려 값

<Stations> 
<Station> 
    <Code>HT</Code> 
    <Type>123</Type> 
    <Names> 
    <Short>H'bosch</Short> 
    <Middle>Den Bosch</Middle> 
    <Long>'s-Hertogenbosch</Long> 
    </Names> 
    <Country>NL</Country> 
</Station> 
</Stations> 

가 여러 노드가 있습니다. 각 노드의 가치가 필요합니다. (-) 패스 (-) 현재

내가 가지고 나는 웹 페이지 (http://webservices.ns.nl/ns-api-stations-v2)

로그인에서 XML있어 XML을 문자열로 변환하여 XDocument로 구문 분석합니다.

var xml = XDocument.Parse(xmlString); 
foreach (var e in xml.Elements("Long")) 
{ 
    var stationName = e.ToString(); 
} 
+0

어떤 필드를 얻으려고하십니까? – Codeman

+0

두 번째 코드 예제에서 볼 수 있듯이 stationname을 가져 오려고했습니다. @ Nathan-Weeler는 아래 답변에서 나에게 맞는 솔루션을 제공합니다. XmlString (XmlStream 아님)을 사용합니다. – Karamazovi

답변

3

XPath를 사용하여 "스테이션"노드를 검색 한 다음 더 많은 XPath를 사용하여 각 후속 노드를 가져올 수 있습니다. 이 예제는 당신이 가능하게 질문에서 일을하려고하는 것 같습니다 Linq에를 사용하지 않는,하지만 여기있다 :

XmlDocument xml = new XmlDocument(); 
xml.Load(xmlStream); 
XmlNodeList stations = xml.SelectNodes("//Station"); 

foreach (XmlNode station in stations) 
{ 
    var code = station.SelectSingleNode("Code").InnerXml; 
    var type = station.SelectSingleNode("Type").InnerXml; 
    var longName = station.SelectSingleNode("Names/Long").InnerXml; 
    var blah = "you should get the point by now"; 
} 

참고 : xmlStream 변수가 오히려 Stream보다는 String 경우, 두 번째 줄에 xml.Load(xmlStream) 대신 xml.LoadXml(xmlStream);을 사용하십시오. 이 경우 작업하는 객체를 더 정확하게 설명하도록 변수의 이름을 지정하는 것이 좋습니다 (별칭 xmlString).

+0

흠, 오류가 발생하는 것 같습니다. System.dll에서 'System.UriFormatException'유형의 첫 번째 예외가 발생했습니다. – Karamazovi

+0

@ User1766381 - xmlStream이 Stream 객체라고 가정했습니다. XML의 문자열이라면 대신'xml.LoadXml (xmlStream)'을 사용하십시오. 또한 스트림이 아닌 경우 소스 코드의 변수 이름을 정확하게 설명하는 것이 좋습니다. –

+0

트릭을 해줘서 고마워! 고맙습니다. – Karamazovi

0

이렇게하면 모든 스테이션 요소에 대해 모든 값이 제공됩니다.

var xml = XDocument.Parse(xmlStream); 
var longStationNames = xml.Elements("Long").Select(e => e.Value); 
관련 문제