使用Powershell遍历XML文件

时间:2018-08-21 02:14:00

标签: xml powershell xpath foreach xml-parsing

我试图运行一个“ for”循环,该循环分析以下XML文件,以便能够将书籍的后代作为参数。再次,对于每本书,我希望能够将书的出版商,作者和类型与书名相关联,以便随后在Powershell脚本中用作参数。

<config>
    <Book name="ABC">
        <property name="Publisher" value="XYZ"/>
        <property name="Author" value="Meow"/>
        <property name="Type" value="Fiction"/>
    </Book>
    <Book name="DEF">
        <property name="Publisher" value="wow"/>
        <property name="Author" value="Bark"/>
        <property name="Type" value="NonFiction"/>
    </Book>
    <Email>
        <Name>XXXXXX</Name>
        <Name>XXXXXX</Name>
    </Email>
</config>

以下是我当前正在使用的代码,但它不符合我的需求。

[xml]$xml = [xml] (Get-Content $File)
$nodes=$xml.SelectNodes("config/child::Book")

foreach($node in $nodes){
   $sid=$node.attributes['name'].value
   $value=$node.attributes['value'].value
   $sid 
   $value
   "-------------------------------"
}

1 个答案:

答案 0 :(得分:2)

您可以通过遍历数组作为数组来简化操作:

(x.lower() for x in xs)

现在$xml = [xml](Get-Content -Path $Path) $collection = foreach ($book in $xml.config.Book) { $out = [ordered]@{ SID = $book.Name } for ($i = 0; $i -lt $book.property.Count; $i++) { $out[$book.property.name[$i]] = $book.property.value[$i] } [pscustomobject]$out } 是一个对象数组,您可以使用SID,Publisher,Author和Type键(即

)更轻松地进行过滤
$collection