Печать имен XmlElement в PowerShell - PullRequest
6 голосов
/ 22 августа 2011

У меня есть XML-документ:

<Root>
  <ItemA Name="1" />
  <ItemB Name="2" />
  <ItemC Name="3" />
</Root>

и скрипт powershell для доступа к данным из этого документа.Мне нужно пройтись по дочерним элементам Root и напечатать имена элементов его дочерних элементов.Пример:

$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

Обновление : Как правильно указал ниже MrKWatkins, в этом случае я мог бы вместо этого использовать свойство LocalName.Однако это не будет работать, если я использую пространства имен, если у меня также есть атрибут LocalName в моем XML.Я хотел бы знать, существует ли решение этой проблемы, которое всегда работает независимо от файла XML.

Ответы [ 3 ]

7 голосов
/ 22 августа 2011

Вы можете сделать что-то вроде этого:

$xml.Root | gm -MemberType property | select Name
3 голосов
/ 22 августа 2011

Вместо этого вы можете использовать свойство LocalName, так как вы не используете пространства имен с вашим XML:

$xml.Root.ChildNodes | foreach { $_.LocalName }
1 голос
/ 30 декабря 2015

Хотя решение manoljlds работает для получения всех имен элементов потомков в родительском узле, оно не помогает для отдельных элементов или когда вы хотите использовать имя элемента с элементом.Я закончил тем, что использовал Reflection.

$xml.Root.ChildNodes | % { $_.GetType().GetProperty("Name").GetValue($_, $null); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...