J'essaie d'utiliser powershell et XPath pour sélectionner l'attribut name indiqué dans l'exemple xml ci-dessous.
$xml_peoples= $file.SelectNodes("//people")
foreach ($person in $xml_peoples){
echo $person.attributes
#echo $person.attributes.name
}
Ci-dessus, le code im en cours d'exécution pour essayer d'obtenir le nom, mais il ne semble pas fonctionner. Aucune suggestion?
<peoples>
<person name='James'>
<device>
<id>james1</id>
<ip>192.192.192.192</ip>
</device>
</person>
</peoples>
Merci d'avance!
Je ne sais pas exactement ce qu'est $ hub, et vous avez commencé votre code à partir du milieu, il n'est donc pas clair si vous définissez correctement $ file sur un objet XmlDocument, mais je pense Voici ce que vous voulez:
[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
}
Ces deux lignes devraient suffire:
[xml]$xml = Get-Content 'C:\path\to\your.xml'
$xml.selectNodes('//person') | select Name
Que diriez-vous d'une ligne?
Select-XML -path "pathtoxml" -xpath "//person/@name"
Pour tous ceux qui doivent contourner la gestion de l'espace de noms de Select-Xml, voici un one-liner qui ne se soucie pas, tant que vous connaissez le chemin direct:
([xml](Get-Content -Path "path\to.xml")).Peoples.Person.Name
Ce qui précède renverra également tous les nœuds correspondants. Ce n'est pas aussi puissant, mais c'est propre lorsque vous connaissez le schéma et que vous voulez en retirer rapidement une chose.