2013-10-11 14 views
6

PowerShell:Jak uzyskać dostęp do elementu z xpath z przestrzenią nazw w powłoce powershell?

$doc = new-object System.Xml.XmlDocument 
$doc.Load($filename) 

$items = Select-Xml -Xml $doc -XPath '//item' 
$items | foreach { 
    $item = $_ 
    write-host $item.name 
} 

dostać ma wyjścia

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<submission version="2.0" type="TREE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:noNamespaceSchemaLocation="TREE.xsd" xmlns="some/kind/of/tree/v1"> 
    <group> 
    <item></item> 
    <item></item> 
    <item></item> 
    </group> 
<submission> 

Odpowiedz

10

masz kilka problemów dzieje. Najpierw musisz określić przestrzeń nazw w wzorze XPath, XML nie jest dobrze uformowany (tag zamykający nie jest tagiem końcowym), a Select-Xml zwraca XmlInfo, a nie XmlElement bezpośrednio. Wypróbuj to:

$xml = [xml]@' 
<submission version="2.0" type="TREE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:noNamespaceSchemaLocation="TREE.xsd" xmlns="some/kind/of/tree/v1"> 
    <group> 
    <item></item> 
    <item></item> 
    <item></item> 
    </group> 
</submission> 
'@ 

$ns = @{dns="some/kind/of/tree/v1"} 
$items = Select-Xml -Xml $xml -XPath '//dns:item' -Namespace $ns 
$items | Foreach {$_.Node.Name} 
Powiązane problemy