2

考虑以下 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();
}
4

2 回答 2

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变量是 a String,而不是 a Stream,请使用xml.LoadXml(xmlStream);第 2 行,而不是xml.Load(xmlStream). 如果是这种情况,我还鼓励您将变量命名为更准确地描述您正在使用的对象(又名。xmlString)。

于 2012-10-22T19:42:56.690 回答
0

这将为您提供每个 Station 元素的所有“Long”值。

var xml = XDocument.Parse(xmlStream);
var longStationNames = xml.Elements("Long").Select(e => e.Value);
于 2012-10-22T19:39:10.120 回答