如何使用powershell从xml中获取属性值?

Sam*_*abu 23 powershell powershell-2.0 xml-parsing

我有一个XML文件列表,我必须从中获取特定行后的字符串.

在文件中,我需要查找标记Event并获取属性值DLLRoutine.例如标签看起来像下面的......

<Event Definition="Validate" DLLPath="" DLLName="Helper.dll" DLLClass="HelpMain" 
       DLLRoutine="pgFeatureInfoOnValidate_WriteToRegSelectedFeatures" 
       InputParameters="pTreeViewFeatureTreeServerOS" RunOnce="no"/>
Run Code Online (Sandbox Code Playgroud)

我只需要获得Dllroutine价值.如何使用PowerShell做到这一点?

rav*_*nth 34

假设您的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
Run Code Online (Sandbox Code Playgroud)


Whi*_*ght 16

假设你的Event元素有一个Events元素根:

$xml.Events.Event.DLLName
Run Code Online (Sandbox Code Playgroud)

我只在Powershell 3中测试了这个


wal*_*2mi 15

你也可以使用xpath而不是点符号:

$xml.SelectNodes('//Events/Event') | select DLLName
Run Code Online (Sandbox Code Playgroud)

  • 当尝试解析名称上带有特殊字符的节点时,这种方法非常有效。 (2认同)

rob*_*pim 6

你可以使用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"
Run Code Online (Sandbox Code Playgroud)