2

XMLの解析を自動化するPowershellスクリプトを作成したいのですが、そこから特定の情報のみを収集します。

現状では、今のところ、私のスクリプトは次のようになっています。

[xml]$xml = Get-Content .\myxml.xml
$foo_sub_length = $xml.report.foos.foo.length - 1
$foo_looper = 0
$foo_looper_brackets = "[$foo_looper]"
if ($foo_sub_length -eq "") {$foo_looper_brackets = ""}
do {
    $xml.report.foos.foo$foo_looper_brackets.bar
}
while ($foo_looper -le $foo_sub_length)

基本的に、すべての$xml.report.foos.foo.bar値を調べて出力する必要があります。このスクリプトを実行すると、エラーが発生します。

Unexpected token 'node_looper_brackets' in expression or statement.
At C:\Users\notarealuser\Desktop\xmlscript.ps1:10 char:55          #not reflective of the above script
+ CategoryInfo          : ParserError: (foo_looper_brackets:String) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken
+     $xml.report.foos.foo$foo_looper_brackets <<<< .bar

ループが機能しない理由や方法について何かアイデアはありますか?

4

2 に答える 2

3

XPathを使用してこの情報を抽出する方がよい場合があります。XML名前空間を使用していない場合、これは非常に簡単です(名前空間を使用すると、少し難しくなります)。

PS> [xml]'<doc><title>Foo</title><title>Bar</title></doc>' | 
         Select-Xml '/doc/title' | Foreach {$_.Node.InnerText}

Foo
Bar
于 2012-09-19T18:04:01.940 に答える
1

これを試して:

[Xml]$doc=@"
<doc><title>
<foo2><bar1><info>1</info></bar1></foo2> 
<foo1><bar1><info>2</info></bar1></foo1>
<foo1><bar2><info>3</info></bar2></foo1>
</title></doc>
"@

$doc.CreateNavigator().Select('/doc/title//info') | select value
于 2012-09-20T05:07:53.767 に答える