web-dev-qa-db-ja.com

Powershellでxpathを使用してxmlの属性を選択する

PowershellとXPathを使用して、以下のxmlの例に示す名前属性を選択しようとしています。

     $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>

前もって感謝します!

15
user1044585

$ 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
}
15
Adi Inbar

次の2行で十分です。

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

1行はどうですか?

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

20
CommonToast

Select-Xmlのガベージ名前空間の処理を回避する必要がある人のために、ダイレクトパスを知っている限り、気にしない1行のライナーを次に示します。

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

上記は、一致するすべてのノードも返します。それほど強力ではありませんが、スキーマを知っていて、その中の1つをすぐに使いたい場合はきれいです。

4
John Neuhaus