gpt4 book ai didi

xml - XPath 和 Powershell - 默认命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:35 26 4
gpt4 key购买 nike

我有以下 PowerShell 函数:

function getProjReferences([string] $projFile) {

# Returns nothing
$Namespace = @{ ns = "http://schemas.microsoft.com/developer/msbuild/2003"; };
$Xml = Select-Xml -Path $projFile -Namespace $Namespace -XPath "//ns:Project/ItemGroup/Reference"

# Returns nothing
[xml] $xml = Get-Content -Path $projFile
[System.Xml.XmlNamespaceManager] $nsMgr = New-Object -TypeName System.Xml.XmlNamespaceManager($xml.NameTable)
$nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003");
[XmlNode] $nodes = $xml.SelectNodes("/ns:Project/ItemGroup/Reference", $nsMgr);
}

尽管 XPath 查询完全有效,但两次尝试均未返回任何结果,我尝试过在 xml 中没有默认命名空间 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"并且它工作正常。

我知道我必须将默认命名空间映射到一个 URI 并使用它来查询具有此映射的 XML,但我似乎无法让它工作。

如何使用默认命名空间查询 XML?我还没有在 Google 上找到可用的东西。

更新

工作代码:

function getProjReferences([string] $projFile) {

[xml] $xml = Get-Content -Path $projFile
[System.Xml.XmlNamespaceManager] $nsMgr = New-Object -TypeName System.Xml.XmlNamespaceManager($xml.NameTable)
$nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003");
[XmlNode] $nodes = $xml.SelectNodes("/ns:Project/ns:ItemGroup/ns:Reference", $nsMgr);
}

最佳答案

如果不查看实际的 XML 文档(或它的代表性示例),我无法 100% 确定。无论如何,这通常是由于 xpath 中缺少 namespace 前缀使用造成的。

请注意,在默认命名空间的情况下,不仅声明默认命名空间的元素,而且它的所有后代都被视为在同一命名空间*中。我建议尝试以下 xpath:

/ns:Project/ns:ItemGroup/ns:Reference

*:后代元素中的显式前缀使用或在后代级别(在更局部的范围内)中声明的其他默认命名空间除外。

关于xml - XPath 和 Powershell - 默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774823/

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