获取某个xml节点并保存该值

时间:2012-10-22 19:35:18

标签: c# 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>

有多个节点。我需要每个节点的值。 我从网页上获得了XML(http://webservices.ns.nl/ns-api-stations-v2)

登录( - )通过( - )

目前我将XML作为字符串并将其解析为XDocument。

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

2 个答案:

答案 0 :(得分:3)

您可以使用XPath检索“Station”节点,然后使用更多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变量是String而不是Stream,请对{2}使用xml.LoadXml(xmlStream);,而不是xml.Load(xmlStream) 。如果是这种情况,我还建议您为变量命名,以便更准确地描述您正在使用的对象(又名。xmlString)。

答案 1 :(得分:0)

这将为您提供&#34; Long&#34;的所有值。对于每个Station元素。

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