2013-10-11 33 views
6

Powershell:Bir öğeye powershell'de bir ad alanına sahip xpath ile nasıl erişirim?

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

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

Hiçbir çıktı üretmesi olsun

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> 

cevap

10

Birkaç sorunlar oluyor var. Öncelikle, XPath deseninde ad alanını belirtmeniz gerekir, XML iyi biçimlendirilmemiş (kapanış etiketi bir son etiket değildir) ve Select-Xml, XmlInfo ve XmlElement öğelerini doğrudan döndürmez. Bunu deneyin:

$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} 
İlgili konular