2013-08-08 4 views
1

XML документ:перебрать атрибуты XML Элемент

<components one="true" two="false" three="1.0.1" four="3.0" five="true"/> 

с помощью PowerShell, как я могу динамически перебрать различные атрибуты в components элементе. Имея в виду, что атрибуты могут быть разными при каждом выполнении кода. Я могу «жестко закодировать» имена атрибутов и т. Д., Но это не эффективно, придется постоянно обновлять по мере добавления/удаления новых компонентов.

ответ

0

списаны из this page и отрегулированы экстракту атрибутов вместо элементов:

... 
[System.Xml.XmlDocument] $xd = new-object System.Xml.XmlDocument 
$file = resolve-path("yourfile.xml") 
$xd.load($file) 
$nodelist = $xd.selectnodes("/components/@*") # XPath is case sensitive 
foreach ($attr in $nodelist) { 
    ... 

Примечание: Я ничего не знаю о PowerShell, но только путем сопоставления с образцом и предполагая, что XPath Microsoft работает как стандартный XPath, вы должны быть в состоянии для создания узлов узлов, содержащих ноль-лист. Даже если это не работает точно так, как написано, оно должно указывать на вас в правильном направлении.

+0

Спасибо Я был в состоянии для прокрутки атрибутов и получения значения - по-прежнему необходимо отобразить атрибут n ame now .. $ nodelist = $ xml.selectnodes ("/ configurationDocument/dotnetDeployableAsset/components/@ *") foreach ($ attr в $ nodelist) { $ attr } – user2665562

+0

DOM имеет функцию 'name()' для получения имени узла. –

0

насчет

([xml]$(Get-Content .\yourfile.xml)).components

, который даст вам следующий вывод

one : true 
two : false 
three : 1.0.1 
four : 3.0 
five : true 

Если вы хотите больше проверочные над результатами, попробуйте следующее:

foreach ($attr in ([xml]$(Get-Content .\yourfile.xml)).components.attributes) 
{ 
$attr.Name #Attribute Name 
$attr."#text" #Attribute Value 
} 
Смежные вопросы