我试图运行一个“ 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
"-------------------------------"
}
答案 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