迭代XML元素的属性

时间:2013-08-08 18:46:41

标签: xml powershell

XML文档:

<components one="true" two="false" three="1.0.1" four="3.0" five="true"/>

使用PowerShell,我如何动态循环遍历components元素中的不同属性。请记住,每次代码执行时,属性都可能不同。我可以“硬编码”属性名称等,但这样效率不高,在添加/删除新组件时必须不断更新。

2 个答案:

答案 0 :(得分:0)

来自this page,并调整为提取属性而不是元素:

...
[System.Xml.XmlDocument] $xd = new-object System.Xml.XmlDocument
$file = resolve-path("yourfile.xml")
$xd.load($file)
$nodelist = $xd.selectnodes("/components/@*") # XPath is case sensitive
foreach ($attr in $nodelist) {
    ...

注意:我对PowerShell一无所知,但只是通过模式匹配并假设Microsoft的XPath像标准XPath一样工作,您应该能够创建包含属性节点的节点列表。即使这不能完全按照书面形式工作,也应该指向正确的方向。

答案 1 :(得分:0)

怎么样?

([xml]$(Get-Content .\yourfile.xml)).components

将为您提供以下输出

one   : true
two   : false
three : 1.0.1
four  : 3.0
five  : true

如果您想要更好地控制结果,请尝试以下方法:

foreach ($attr in ([xml]$(Get-Content .\yourfile.xml)).components.attributes)
{
$attr.Name #Attribute Name
$attr."#text" #Attribute Value
}