【问题标题】:Access XML NodeAccess XML Node
【发布时间】:2014-10-12 19:13:03
【问题描述】:

我正在从 Web 服务收集一些 XML,我收到的格式为:

<devices>
  <device>
    <hostname>name</hostname>
    <SerialNumber>38xkf8</SerialNumber>
    <Uptime units="seconds">603835</Uptime>
  </device>
  <device>
    <hostname>name</hostname>
    <SerialNumber>495dkf</SerialNumber>
    <Uptime units="seconds">92548</Uptime>
  </device>
</devices>

我可以解析信息,但是当我尝试访问秒数时,我似乎无法获得我想要的数据。当我尝试访问 Uptime 元素时:

$xml.Devices.Device.Uptime

units                      #text
-----                      -----
seconds                    603835
seconds                    92548

我不能只得到返回的#text 值。

编辑:

解决办法:

Select-Xml -Xml $xml -XPath "//Device" | %
{
  $_.Node.Uptime.InnerText
}

【问题讨论】:

  • 您遇到了什么错误?你能显示你正在解析的实际 XML 以获得这个结果吗?
  • 我提出的截图来自实际的 XML 文件。
  • 那么其他几秒钟来自哪里,或者是错误?您发布的 sn-p 是 whole XML 文件吗?
  • 顺便说一句 - units 将被称为 属性

标签: xml powershell


【解决方案1】:

格式良好的 XML 需要在引号前加等号

<Uptime units="seconds">603835</Uptime>

【讨论】:

  • 那是我写这个问题的错。实际文件确实有 '='。
【解决方案2】:

你也可以使用 Select-Xml 来做:

Select-Xml -Xml $xml -XPath "//Uptime" | ForEach{$_.Node.InnerText}

或者更简单(可能无法在旧版本的 PowerShell 中工作,我不确定):

(Select-Xml -Xml $xml -XPath "//Uptime").Node.InnerText

【讨论】:

  • 这是完美的。非常感谢!
猜你喜欢
  • 2017-11-20
  • 2017-01-02
  • 2012-12-27
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2018-01-15
相关资源
最近更新 更多