xml - 尝试获取XML元素

标签 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,但到目前为止仍未成功。

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

最佳答案

我对Powershell并不熟悉,因此无法为您提供Powershell代码,但是我认为Select-Xml可与XPath表达式一起使用。

给定您的XML文档,并且可以通过某种方式注册默认 namespace ,以下XPath表达式将起作用:

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

如果您无法注册默认 namespace ,则可以注册前缀和 namespace ,例如
/tb:Configuration/tb:SIP/tb:Profile/tb:Proxy/tb:Address/text()

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

如果Select-Xml无法处理 namespace ,请使用
/*[local-name() = 'Configuration']/*[local-name() = 'SIP']/*[local-name() = 'Profile']/*[local-name() = 'Proxy']/*[local-name() = 'Address']/text()

所有这些路径表达式的唯一结果是
172.31.24.8

关于xml - 尝试获取XML元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295498/

相关文章:

android - 从不同的 Activity 更改 ImageView

Powershell 电子邮件 : How to add new line in email Body?

powershell - 通过 Gmail SMTP 从 Powershell 发送邮件

powershell - 如何使用 PowerShell v4 将成员从一个安全组复制到 AD 中的另一个安全组?

java - 使用 Java 将 HTML 符号和 HTML 名称转换为 HTML 数字

java - 来自 java 的 libxml2

Xpath 不是通过 Powershell 在 Select-Xml 中的运算符

xml - 使用 Powershell 进行外科 XML 编辑

c# - .net 中的 XML 序列化