Ho la seguente funzione PowerShell:XPath e PowerShell - namespace predefinito
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);
}
Entrambi i tentativi di ritorno nulla, anche se la query XPath è perfectley valida, ho provato senza il xmlns namespace default = "http: // schemas.microsoft.com/developer/msbuild/2003 "in xml e funziona correttamente.
Capisco che devo mappare lo spazio dei nomi predefinito su un URI e usarlo per interrogare l'XML con questa mappatura, ma non riesco a farlo funzionare.
Come faccio a interrogare l'XML con uno spazio dei nomi predefinito ?, Non ho ancora trovato nulla di utile su Google.
Aggiornamento
codice di lavoro:
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);
}
Mostrare il documento XML di input. –