在powershell中使用xpath选择xml中的属性

时间:2013-07-11 00:56:30

标签: xml powershell xpath scripting

我正在尝试使用powershell和XPath来选择以下xml示例中显示的name属性。

     $xml_peoples= $file.SelectNodes("//people") 
     foreach ($person in $xml_peoples){
            echo $person.attributes
            #echo $person.attributes.name
     }

上面是运行试图获取名称的代码,但它似乎不起作用。有什么建议吗?

<peoples>
    <person name='James'>
        <device>
            <id>james1</id>
            <ip>192.192.192.192</ip>
        </device>
    </person>
</peoples>

提前致谢!

4 个答案:

答案 0 :(得分:34)

这两行应该足够了:

[xml]$xml = Get-Content 'C:\path\to\your.xml'
$xml.selectNodes('//person') | select Name

答案 1 :(得分:19)

一行怎么样?

Select-XML -path "pathtoxml" -xpath "//person/@name"

答案 2 :(得分:15)

我不确定 $ hub 是什么,你从中间启动了代码,所以不清楚你是否正确地将 $ file 设置为XmlDocument对象,但我认为这就是你想要的:

[System.Xml.XmlDocument]$file = new-object System.Xml.XmlDocument
$file.load(<path to XML file>)
$xml_peoples= $file.SelectNodes("/peoples/person")
foreach ($person in $xml_peoples) {
  echo $person.name
}

答案 3 :(得分:4)

对于任何必须解决Select-Xml垃圾命名空间处理问题的人来说,只要你知道直接路径,这里就是一个不关心的单行:

([xml](Get-Content -Path "path\to.xml")).Peoples.Person.Name

以上将返回所有匹配的节点。它不是那么强大,但是当你了解架构并且想要快速完成一件事时,它就会很干净。