Подтвердить что ты не робот

Как получить значение атрибута из xml с помощью powershell?

У меня есть список файлов XML, из которых я должен получить строку после определенной строки.

В файлах мне нужно найти тег Event и получить значение атрибута DLLRoutine. например тег будет выглядеть примерно так...

<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" 
       DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" 
       InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>

Мне просто нужно получить значения DLLRoutine. Как это сделать с помощью PowerShell?

4b9b3361

Ответ 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"