7
votes

Impression des noms de xmelement dans PowerShell

J'ai un document XML:

$xml = [xml](gc MyXmlFile.xml);

$xml.Root.Name 
# prints "Root"

$xml.Root.ChildNodes | foreach { $_.Name } 
# prints 1 2 3 because Item(A|B|C) have an attribute named "Name"
# I need to print ItemA ItemB ItemC


0 commentaires

4 Réponses :


4
votes

Vous pouvez utiliser la propriété localName à la place car vous n'utilisez pas les espaces de noms avec votre XML:

$xml.Root.ChildNodes | foreach { $_.LocalName }


1 commentaires

Merci, cela résout mon problème particulier. Je quitte toujours la question sans réponse de voir si une personne propose une solution plus "générique" (une autre fonctionnerait également si j'avais l'aide des espaces de noms ou si j'avais aussi un attribut localName).



7
votes

Vous pouvez faire quelque chose comme ceci: xxx


3 commentaires

Bah, j'étais trop lent. Je vais supprimer le mien :)


@ Ebgreen- J'aime la partie "solution purement phénoménologique" :)


Oui, je sais que ça marche et je comprends pourquoi ça marche. Je ne comprends tout simplement pas pourquoi cela doit fonctionner de cette façon. Ça fait sale :)



2
votes

tandis que la solution Manoljlds fonctionne pour obtenir tous les noms d'éléments des enfants dans un nœud parent, cela n'aide pas les éléments uniques ou lorsque vous souhaitez utiliser le nom de l'élément avec l'élément. J'ai fini par simplement utiliser la réflexion.

$xml.Root.ChildNodes | % { $_.GetType().GetProperty("Name").GetValue($_, $null); }


0 commentaires

0
votes

Soyez prudent, s'il existe un attribut dont le nom est "Nom", il retournera la valeur de l'attribut, pas l'élément. Pour vous garantir, obtenir la valeur correcte, vous pouvez utiliser la méthode get_name (), mais vous devez regarder sur NULL puis que vous utilisiez une méthode.

Exemple: xxx

sortie: xxx

Utilisation get_name () xxx < / pré>

sortie: xxx

N'oubliez pas que vous pouvez utiliser une méthode sur un tableau, mais vous devez faire attention car si un élément de tableau est null, il échouera. .

par exemple @ ($ elem1, $ null, $ elemen2) .get_name () lancera une erreur.


0 commentaires