特定の行の後に文字列を取得する必要があるXMLファイルのリストがあります。
ファイルで、タグEvent
を探し、属性値DLLRoutine
を取得する必要があります。例えばタグは次のようになります...
<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain"
DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures"
InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
Dllroutine
値を取得するだけです。 PowerShellを使用してそれを行う方法
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
Event
要素にEvents
要素のルートがあると仮定します。
$xml.Events.Event.DLLName
私はこれをPowershell 3でのみテストしました
ドット表記の代わりにxpathも使用できます。
$xml.SelectNodes('//Events/Event') | select DLLName
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"
$xml.Events.Event.DLLName
バージョン2で動作しますが、いくつかのスクリプトでxpathを使用しようとしましたが、毎回失敗するため、ドット表記を試してみるまで間違っていたと思いました。