Выбор атрибутов в xml с помощью xpath в powershell

Я пытаюсь использовать powershell и XPath для выбора атрибута name, показанного в приведенном ниже примере xml.

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

Выше код im работает, чтобы попытаться получить имя, но он, похоже, не работает. Любые предложения?

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

Спасибо заранее!

Ответ 1

Я не уверен, что такое $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
}

Ответ 2

Эти две строки должны быть достаточными:

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

Ответ 3

Как насчет одной строки?

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

Ответ 4

Для тех, кто должен работать с обработкой пространства имен мусора Select-Xml, здесь нужен один лайнер, который вам не нравится, если вы знаете прямой путь:

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

Вышеуказанное также вернет все соответствующие узлы. Он не такой мощный, но он чист, когда вы знаете схему и хотите, чтобы одна вещь из нее быстро.