使用Powershell从命名空间中选择XML节点

使用Powershell从命名空间中选择XML节点,xml,powershell,namespaces,selectsinglenode,Xml,Powershell,Namespaces,Selectsinglenode,我有以下xml: <?xml version="1.0" encoding="utf-8"?> <userSettings> <setting name="TelephonyServerHost"> <value>sipserver.domain.local</value> </setting> <setting name="SipServerFqdn"> <value>s

我有以下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>

但我无法理解如何查询AutoIndexEnabled元素的语法。

在PowerShell中,您可以访问XML节点,如属性,因此这是可行的:

($xml.DocumentElement.setting | ? name -eq 'KMSettings').value.KMIndexSettings.AutoIndexEnabled
下面是一个有效的XPATH解决方案:

[string]$xpath="//userSettings/setting[@name='KMSettings']/value/KMIndexSettings/AutoIndexEnabled"       
$xml.SelectSingleNode($xpath)

在PowerShell中,您可以访问类似属性的XML节点,因此这是可行的:

($xml.DocumentElement.setting | ? name -eq 'KMSettings').value.KMIndexSettings.AutoIndexEnabled
下面是一个有效的XPATH解决方案:

[string]$xpath="//userSettings/setting[@name='KMSettings']/value/KMIndexSettings/AutoIndexEnabled"       
$xml.SelectSingleNode($xpath)

我不明白这个问题。名称空间在这里并不重要,因为xml示例不包含前缀元素或默认名称空间。您可以如下方式访问元素:

$xml.SelectNodes("//AutoIndexEnabled")

输出:

#text
-----
false

PS> $xml.SelectNodes("//AutoIndexEnabled").InnerText
false

我不明白这个问题。名称空间在这里并不重要,因为xml示例不包含前缀元素或默认名称空间。您可以如下方式访问元素:

$xml.SelectNodes("//AutoIndexEnabled")

输出:

#text
-----
false

PS> $xml.SelectNodes("//AutoIndexEnabled").InnerText
false

在这个特定的示例中,您将如何选择名为“xmlns:xsi”的属性的值


在这个特定的示例中,您将如何选择名为“xmlns:xsi”的属性的值


我不是PowerShell用户,因此无法使用PowerShell特定的语法提供帮助,但就xml而言,AutoIndexEnabled元素位于xsi名称空间内,因此您应该使用PowerShell的工具访问名称空间,然后访问该名称空间内的节点。进行快速搜索,我找到了与您的问题相匹配的元素我不是PowerShell用户,因此无法使用PowerShell特定的语法,但就xml而言,AutoIndexEnabled元素位于xsi命名空间中,因此,您应该使用PowerShell的工具访问名称空间,然后访问该名称空间中的节点。进行快速搜索,我找到了与您的问题相匹配的示例更改?我看不到任何SOAP命名空间,您甚至没有在xpath中使用它..:SUpps,你说得对@FrodeF。我只是从前面的答案中复制了答案。谢谢你的提示!谢谢,您的xpath很有帮助。示例更改了吗?我看不到任何SOAP命名空间,您甚至没有在xpath中使用它..:SUpps,你说得对@FrodeF。我只是从前面的答案中复制了答案。谢谢你的提示!谢谢,你的帮助。谢谢。我对xpath语法感到困惑。谢谢。我对xpath语法感到困惑。