【问题标题】:How to fetch an attribute value from xml using powershell?如何使用powershell从xml中获取属性值?
【发布时间】: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?

【问题讨论】:

    标签: powershell xml-parsing powershell-2.0


    【解决方案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,但每次都失败,所以直到我尝试使用点符号之前,我认为我做错了。

          【讨论】:

            猜你喜欢
            • 2015-12-16
            • 1970-01-01
            • 2013-11-15
            • 1970-01-01
            • 2017-02-11
            • 1970-01-01
            • 2012-02-15
            • 2016-11-05
            相关资源
            最近更新 更多