gpt4 book ai didi

Powershell:当元素具有 "xmlns"标记时,XPath 无法选择?

转载 作者:行者123 更新时间:2023-12-03 15:49:29 26 4
gpt4 key购买 nike

我有一个非常简单的 xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<First>
<Second>
<Folder>today</Folder>
<FileCount>10</FileCount>
</Second>
<Second>
<Folder>tomorrow</Folder>
<FileCount>90</FileCount>
</Second>
<Second>
<Folder>yesterday</Folder>
<FileCount>22</FileCount>
</Second>
</First>

然后我有一个 powershell 脚本来选择“文件夹”元素:

[xml]$xml=Get-Content "D:\m.xml"
$xml.SelectNodes("//Folder")

输出:

#text                                                                                                                                                                            
-----
today
tomorrow
yesterday

没问题。但是,如果我更改 xml 文件以将“xmlns="http://schemas.microsoft.com/developer/msbuild/2003"添加到“First”,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<First xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Second>
<Folder>today</Folder>
<FileCount>10</FileCount>
</Second>
<Second>
<Folder>tomorrow</Folder>
<FileCount>90</FileCount>
</Second>
<Second>
<Folder>yesterday</Folder>
<FileCount>22</FileCount>
</Second>
</First>

然后,我的 powershell 脚本什么都不输出。为什么?如何更改我的 powershell 脚本以支持此 xmlns?

非常感谢。

最佳答案

您添加的是默认命名空间。与带前缀的命名空间不同,后代元素继承祖先默认命名空间隐式,除非另有说明(使用显式前缀或指向不同 URI 的本地默认命名空间)。

要选择命名空间中的元素,您需要定义指向命名空间 URI 的前缀,并在您的 XPath 中正确使用该前缀,例如:

$ns = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
$ns.AddNamespace("d", $xml.DocumentElement.NamespaceURI)
$xml.SelectNodes("//d:Folder", $ns)

关于Powershell:当元素具有 "xmlns"标记时,XPath 无法选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31023597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com