我有以下的PowerShell功能:XPath和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查詢perfectley有效,我已經沒有默認命名空間的xmlns =「HTTP嘗試:// schemas.microsoft.com/developer/msbuild/2003「在xml和它的工作正常。
據我所知,我必須將默認命名空間映射到一個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文檔。 –