web-dev-qa-db-ja.com

PowerShellを使用してXMLから属性値を取得する方法は?

特定の行の後に文字列を取得する必要があるXMLファイルのリストがあります。

ファイルで、タグEventを探し、属性値DLLRoutineを取得する必要があります。例えばタグは次のようになります...

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

Dllroutine値を取得するだけです。 PowerShellを使用してそれを行う方法

21
Samselvaprabu

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
33
ravikanth

Event要素にEvents要素のルートがあると仮定します。

$xml.Events.Event.DLLName

私はこれをPowershell 3でのみテストしました

16
WhiteKnight

ドット表記の代わりにxpathも使用できます。

$xml.SelectNodes('//Events/Event') | select DLLName
14
walid2mi

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"
3
pim

$xml.Events.Event.DLLName

バージョン2で動作しますが、いくつかのスクリプトでxpathを使用しようとしましたが、毎回失敗するため、ドット表記を試してみるまで間違っていたと思いました。

3
Brian