我有以下Power
Shell功能:
function getProjReferences([string] $projFile) { # Returns nothing $Namespace = @{ ns = "http://schemas.microsoft.com/developer/msbuild/2003"; }; $Xml = @R_354_3270@ -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); }