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 回答