试图获取XML元素

时间:2015-12-15 17:19:34

标签: xml powershell select-xml

这是一段XML文件,我想使用PowerShell代码从中提取IP地址(此处为172.31.24.8):

<?xml version="1.0"?>
<Configuration xmlns="http://www.tandberg.com/XML/CUIL/2.0" product="Cisco Codec" version="TC7.3.2.14ad7cc" apiVersion="2">
  <SIP item="1">
    <Profile item="1" maxOccurrence="1">
      <Proxy item="1" maxOccurrence="4">
        <Address item="1" valueSpaceRef="/Valuespace/STR_0_255_NoFilt">172.31.24.8</Address>
        <Discovery item="1" valueSpaceRef="/Valuespace/TTPAR_AutoManual">Manual</Discovery>
      </Proxy>
    </Profile>
  </SIP>
</Configuration>

我尝试使用其他StackOverflow示例中描述的Select-Xml,但到目前为止都没有成功。

正确实现这一目标的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

我不熟悉Powershell,因此我无法帮助您使用Powershell代码,但我认为Select-Xml适用于XPath表达式。

鉴于您的XML文档,并且鉴于您可以以某种方式注册默认命名空间,以下XPath表达式将起作用:

/Configuration/SIP/Profile/Proxy/Address/text()

如果您无法注册默认命名空间,也许可以注册前缀和命名空间,例如

/tb:Configuration/tb:SIP/tb:Profile/tb:Proxy/tb:Address/text()

其中tb必须与名称空间http://www.tandberg.com/XML/CUIL/2.0对应。 Here is a link解释了如何声明名称空间。

如果Select-Xml无法处理名称空间,请使用

/*[local-name() = 'Configuration']/*[local-name() = 'SIP']/*[local-name() = 'Profile']/*[local-name() = 'Proxy']/*[local-name() = 'Address']/text()

并且所有这些路径表达式的唯一结果将是

172.31.24.8

答案 1 :(得分:0)

我终于开始工作了。

这是一个返回所需输出的PowerShell代码示例。

$Path="Path\to\my\file.xml"
$Namespace = @{tb="http://www.tandberg.com/XML/CUIL/2.0"}
$xml = Select-Xml -Path $Path -Namespace $Namespace -XPath "//tb:Address"
$xml | foreach {$_.node.InnerXML}

返回IP地址值。

我的原始代码未指定&#34; tb:&#34;在XPath中,这是我的错误。

谢谢你的帮助!

此致 弗洛里安