Powershell - 通过XML循环

时间:2018-06-18 14:02:55

标签: xml powershell

我已经使这个示例XML循环,我有兴趣输出每个项目的产品名称。

<example>
<item>
    <productname>Hoover</productname>
</item>
<item>
    <productname>TV</productname>
</item>
<item>
    <productname>Microwave</productname>
</item>
<item>
    <productname>Computer</productname>
</item>
</example>

在我的PowerShell中,我可以轻松遍历每个项目,但我无法选择“productname”的内容,我不确定为什么。这是我的示例powershell代码:

[xml] $xml = Get-Content "./xmlexample.xml"

foreach ($item in $xml.example) {
    Write-Host($item.InnerXML) #Outputs all XML as expected
    Write-Host($item.InnerText) #Outputs the text of all child elements as expected 
    Write-Host($item.productname.InnerText) #Does not output anything
    Write-Host($item.productname.InnerXML) #Does not output anything
}

任何帮助或建议,为什么这不起作用将不胜感激。它的行为就像一个没有更多孩子的儿童元素,不会以同样的方式对待。

2 个答案:

答案 0 :(得分:2)

迭代$xml.example.ChildNodes,然后文字只是$item.productname

PS C:\users\IEUser\Documents> foreach ($item in $xml.example.ChildNodes) {
>>>    Write-Host($item.productname)
>>> }
Hoover
TV
Microwave
Computer

或者,如果您只想要包含item的{​​{1}}元素,则可以迭代productname个节点:

item

或者直接提取字符串数组:

PS C:\users\IEUser\Documents> foreach ($item in $xml.example.item) {
>>>    Write-Host($item.productname)
>>> }
Hoover
TV
Microwave
Computer

答案 1 :(得分:1)

Powershell xml将xml文档的叶子映射为属性。此外,类似于Linq-to-XML,每个查询可能返回一个元素数组。 所以你可以像这样写你的循环:

firebase.auth().onAuthStateChanged

结果:

<Root/>

'productname'的作用类似于可以设置或检索的字符串属性。因此它没有其他xml方法或属性。