1

我有以下xml:

<?xml version="1.0" encoding="utf-8"?>
<userSettings>
  <setting name="TelephonyServerHost">
    <value>sipserver.domain.local</value>
  </setting>
  <setting name="SipServerFqdn">
    <value>sipserver.domain.local</value>
  </setting>
  <setting name="WebServicesHost">
    <value>websvc.domain.local</value>
  </setting>
  <setting name="KMSettings">
    <value>
      <KMIndexSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <AutoIndexEnabled>false</AutoIndexEnabled>
     </KMIndexSettings>
    </value>
  </setting>
</userSettings>

我能够使用 xpath 检索设置元素的值,但我无法找出使用命名空间查询 AutoIndexEnabled 元素的正确语法。

对于读取 KMSettings 或其他没有命名空间的节点,这可以按预期工作:

$xml = New-Object -TypeName 'System.XML.XMLDocument'
$xml.Load($xmlFilePath)
$node = $xml.SelectSingleNode("//userSettings/setting[@name='KMSettings']")

但我无法弄清楚如何查询 AutoIndexEnabled 元素的语法。

4

3 回答 3

2

在 PowerShell 中,您可以访问诸如属性之类的 XML 节点,因此可以使用:

($xml.DocumentElement.setting | ? name -eq 'KMSettings').value.KMIndexSettings.AutoIndexEnabled

这是一个有效的 XPATH 解决方案:

[string]$xpath="//userSettings/setting[@name='KMSettings']/value/KMIndexSettings/AutoIndexEnabled"       
$xml.SelectSingleNode($xpath)
于 2016-05-13T21:07:08.947 回答
2

我不明白这个问题。命名空间在这里无关紧要,因为您的 xml-sample 不包含前缀元素或默认命名空间。您可以像这样访问元素:

$xml.SelectNodes("//AutoIndexEnabled")

或者

$xml.SelectNodes("//setting[@name='KMSettings']//AutoIndexEnabled")

输出:

#text
-----
false

PS> $xml.SelectNodes("//AutoIndexEnabled").InnerText
false
于 2016-05-13T21:38:59.467 回答
0

I this particular example, how would you select the value of the attribute with name "xmlns:xsi"?

<value>
  <KMIndexSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... >
    <AutoIndexEnabled>false</AutoIndexEnabled>
 </KMIndexSettings>
</value>

I would expect to see the output: "http://www.w3.org/2001/XMLSchema-instance"

This is what I'm trying.The colon is throwing off my script. I get the following error: "Unexpected token ':id' in expression or statement."

([xml](gc $files[$i])).contentHaul.constant.typedValue.value.a:id
于 2018-08-08T18:56:53.193 回答