Как получить значение атрибута из xml с помощью powershell?
У меня есть список файлов XML, из которых я должен получить строку после определенной строки.
В файлах мне нужно найти тег Event
и получить значение атрибута DLLRoutine
.
например тег будет выглядеть примерно так...
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain"
DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures"
InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
Мне просто нужно получить значения DLLRoutine
. Как это сделать с помощью PowerShell?
Ответы
Ответ 1
Предполагая, что ваша структура XML похожа на:
$xml = [xml]'
<Events>
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
<Event Definition="Validate1" DLLPath="" DLLName="Helper.dll1" DLLClass="HelpMain1" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
</Events>
'
#Or get it from a XML file
$xml = [xml](Get-Content $XMLPath)
$xml.Events.Event | Select DLLName
Ответ 2
Предполагая, что ваш элемент Event
имеет корень элемента Events
:
$xml.Events.Event.DLLName
Я тестировал это только в Powershell 3
Ответ 3
вы можете использовать также xpath вместо точечной нотации:
$xml.SelectNodes('//Events/Event') | select DLLName
Ответ 4
Попробуйте $xml.Events.Event.DLLName
Она будет работать в версии 2, я пытался использовать XPath в несколько сценариев, и это не может каждый раз так, пока я не попробовал точечную нотацию, я думал, что я делаю неправильно.
Ответ 5
Вы можете использовать Select-XML
:
$xml = [xml]'
<Events>
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
<Event Definition="Validate1" DLLPath="" DLLName="Helper.dll1" DLLClass="HelpMain1" DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
</Events>
'
Select-XML -xml $xml -xpath "//Event/@DLLName"