尝试获取 XML 元素
Trying to get XML element
这是一段 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>
我尝试按照其他 Whosebug 示例中的描述使用 Select-Xml
,但到目前为止没有成功。
正确实现此目的的最简单方法是什么?
我不熟悉 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
我终于让它工作了。
这是一段 powershell 代码示例,returns 想要的输出。
$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}
此 returns IP 地址值。
我的原始代码没有在 XPath 中指定 "tb:",那是我的错误。
感谢您的帮助!
此致,
弗洛里安
这是一段 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>
我尝试按照其他 Whosebug 示例中的描述使用 Select-Xml
,但到目前为止没有成功。
正确实现此目的的最简单方法是什么?
我不熟悉 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
我终于让它工作了。
这是一段 powershell 代码示例,returns 想要的输出。
$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}
此 returns IP 地址值。
我的原始代码没有在 XPath 中指定 "tb:",那是我的错误。
感谢您的帮助!
此致, 弗洛里安