36

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

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

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

我只需要获得Dllroutine价值。如何使用 PowerShell 执行此操作?

4

5 回答 5

48

假设您的 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
于 2012-08-31T10:18:46.773 回答
18

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

$xml.Events.Event.DLLName

我只在 Powershell 3 中测试过这个

于 2013-09-30T14:39:40.007 回答
17

您也可以使用 xpath 代替点表示法:

$xml.SelectNodes('//Events/Event') | select DLLName
于 2012-09-01T07:24:04.373 回答
8

你可以使用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"
于 2017-03-20T14:17:32.600 回答
3

尝试$xml.Events.Event.DLLName

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

于 2014-04-18T15:23:47.317 回答