使用PowerShell读取XML文件并根据条件选择标签

时间:2019-04-30 14:56:09

标签: xml powershell parsing

我必须解析下面的文件,并在报告中显示一些标签。

<CommChannelQueryResponse>
    <CommChannel>
        <ChannelName>C1</ChannelName>
        <AdapterAttribute>
            <Name>Filename</Name>
            <Value>a.txt</Value>
        </AdapterAttribute>
        <AdapterAttribute>
            <Name>Directory</Name>
            <Value>/dir1</Value>
        </AdapterAttribute>    
        <AdapterAttribute>
            <Name>ArchiveDirectory</Name>
            <Value>/archive1</Value>
        </AdapterAttribute>
        ...
    </CommChannel>
    <CommChannel>
    ...
</CommChannelQueryResponse>

根据该论坛的另一篇文章,我尝试了以下方法,它确实有效。

[xml]$XmlDocument = Get-Content commchannels.xml
$XmlDocument.CommChannelQueryResponse.CommChannel |
    Format-Table -Property @{L="Name"; E={$_.ChannelName}},
        @{L="Filename";Expression={$_.AdapterAttribute.Value[0]}}
Name Filename
---- --------
C1   a.txt
C2   b.txt

我正在尝试对此进行改进,因为此代码取决于“文件名”是第一个属性。如何更改显示带有AdapterAttribute.Value的{​​{1}}?

我尝试了以下操作,如您所见,它没有显示“文件名”的任何内容。

AdapterAttribute.Name = "Filename"
Name Filename
---- --------
C1
C2

1 个答案:

答案 0 :(得分:0)

不知道您是否要进入Xpath表达式...(区分大小写)

(select-xml "/CommChannelQueryResponse/CommChannel/AdapterAttribute" file.xml).node

Name             Value
----             -----
Filename         a.txt
Directory        /dir1
ArchiveDirectory /archive1

(select-xml "/CommChannelQueryResponse/CommChannel/AdapterAttribute[Name/text()='Filename']" file.xml).node

Name     Value
----     -----
Filename a.txt