2011-10-31 88 views
0

我有這個簡單的XML文檔。如果可能的話,我想要使用("foo","bar")("baz","zab")的對,只要select-xml即可。它是否可行,如何?如何使用XPath從XML中提取兄弟文本?

<?xml version="1.0" encoding="UTF-8"?> 
<tag> 
    <outer> 
    <a>foo</a> 
    <b>bar</b> 
    </outer> 
    <outer> 
    <a>baz</a> 
    <b>zab</b> 
    </outer> 
</tag> 

我遇到的問題是,select-xml連續調用失去select-xml以前調用的背景和AFAIK被它是未定義返回的節點的順序,所以才拉上兩個列表似乎無法使用。或者我錯了,它返回的節點的順序是文檔中的順序?

回答

2

您可以讀取該文件:

$xml = [xml](Get-Content .\test.xml) 

然後用:

$xml.tag.outer 

或者這樣:

foreach ($outer in $xml.tag.outer) 
{ 
    $outer.a 
    $outer.b 
} 

隨着Select-Xml

Clear-Host 

$InputText = @" 

<?xml version="1.0" encoding="UTF-8"?> 
<tag> 
    <outer> 
    <a>foo</a> 
    <b>bar</b> 
    </outer> 
    <outer> 
    <a>baz</a> 
    <b>zab</b> 
    </outer> 
</tag> 
"@ 

$xml = [xml]($InputText) 

$nodes = Select-Xml -Xml $xml -XPath "//outer" 

foreach ($node in $nodes) 
{ 
$node.node.a 
} 
+0

@JPBland:它的作品,真棒!我不知道我可以以類似的方式訪問DOM中的節點。 – wilx