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

Posted

技术标签:

【中文标题】如何使用powershell从xml中获取属性值?【英文标题】:How to fetch an attribute value from xml using powershell? 【发布时间】:2012-08-26 02:25:13 【问题描述】:

我有一个 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】:

你可以使用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"

【讨论】:

【参考方案5】:

试试$xml.Events.Event.DLLName

它可以在版本 2 中工作,我曾尝试在多个脚本中使用 xpath,但每次都失败,所以直到我尝试使用点符号之前,我认为我做错了。

【讨论】:

以上是关于如何使用powershell从xml中获取属性值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 XML/MPD 文件中获取属性值?

如何使用 xslt 获取 XML 的属性值和代码作为 html 的值

如何从 xml 过滤以使用 powershell 获取启动持续时间?

如何使用PowerShell转换XML属性?

如何使用PowerShell更改XML Element属性的值?

如何使用 XML::XPath 获取属性?