【问题标题】:Get certain xml node and save the value获取某个xml节点并保存值
【发布时间】:2012-10-22 19:35:18
【问题描述】:

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

【问题讨论】:

  • 您要获取哪个字段?
  • 我尝试获取站名 Long,如您在第二个代码示例中所见。 @Nathan-Weeler 在下面的答案中为我提供了正确的解决方案。请注意,我使用的是 XmlString(不是 XmlStream)。

标签: c# xml


【解决方案1】:

您可以使用 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)。

【讨论】:

  • 嗯,我似乎遇到了一个错误:System.dll 中发生了“System.UriFormatException”类型的第一次机会异常
  • @User1766381 - 我假设你的 xmlStream 是一个 Stream 对象。如果它只是一个 XML 字符串,请改用xml.LoadXml(xmlStream)。此外,如果它不是 Stream,请考虑更改源代码中的变量名称以准确描述。
  • 没问题!祝你项目的其余部分好运!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2016-10-09
    • 2013-08-12
    相关资源
    最近更新 更多