2013-10-11 32 views
6

Powershell:Làm cách nào để truy cập một phần tử có xpath với vùng tên trong PowerShell?

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

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

tôi nhận được không có đầu ra

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> 

Trả lời

10

Bạn đã có một vài vấn đề xảy ra. Trước tiên, bạn cần xác định không gian tên trong mẫu XPath, XML không được định dạng đúng (thẻ đóng không phải là thẻ kết thúc) và Select-Xml trả về XmlInfo chứ không phải XmlElement trực tiếp. Hãy thử điều này:

$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} 
Các vấn đề liên quan