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

时间:2012-08-31 09:22:23

标签: powershell xml-parsing powershell-v2.0

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

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

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

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

5 个答案:

答案 0 :(得分:32)

假设您的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

答案 1 :(得分:15)

假设您的Event元素具有Events元素根:

$xml.Events.Event.DLLName

我只在Powershell 3中测试了这个

答案 2 :(得分:14)

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

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

答案 3 :(得分:3)

为什么不"%sqlpackage_path%"

Select-XML

答案 4 :(得分:2)

尝试$xml.Events.Event.DLLName

它将在版本2中工作,我试图在几个脚本中使用xpath并且它每次都失败,所以直到我尝试点符号我认为我做错了。