ich folgende Powershell-Funktion haben:XPath und Powershell - Standard-Namespace
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);
}
beide Versuche nichts zurückgeben, obwohl die XPath-Abfrage perfectley gültig ist, ich ohne den Standard-Namespace xmlns versucht haben = "http: // schemas.microsoft.com/developer/msbuild/2003 "in der XML und es funktioniert gut.
Ich verstehe, dass ich den Standard-Namespace zu einem URI zuordnen muss und damit das XML mit diesem Mapping abfragen, aber ich kann nicht scheinen, es zu funktionieren.
Wie frage ich die XML mit einem Standard-Namespace ?, Ich habe noch nichts brauchbares auf Google finden.
aktualisiert
Arbeitscode:
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);
}
Bitte zeigen Sie das Eingabe-XML-Dokument an. –