微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell 5.1:无法使用Get-Unique对提取的XML属性名称进行排序

如何解决Powershell 5.1:无法使用Get-Unique对提取的XML属性名称进行排序

我试图从以下示例文件提取存储在className元素的属性<input>中的所有唯一值:

<?xml version="1.0" encoding="UTF-8"?>

<config>
    <input name="reutersIn" className="com.ib.Feed.csv.TarCsvFileInput">
        <uSEOutputMarketConfig>true</uSEOutputMarketConfig>
        <optional>false</optional>
        <archiveOnly>true</archiveOnly>
    </input>

    <input name="fidessaIn" className="com.ib.Feed.csv.TarCsvFileInput">
        <uSEOutputMarketConfig>true</uSEOutputMarketConfig>
        <optional>false</optional>
        <archiveOnly>true</archiveOnly>
    </input>

    <input name="iceIn" className="com.ib.Feed.csv.TarCsvFileInput">
        <uSEOutputMarketConfig>true</uSEOutputMarketConfig>
        <optional>false</optional>
        <archiveOnly>true</archiveOnly>
    </input>
</config>

如上面的XML文件示例所示,具有相同值的className属性出现3次。

我尝试提取className值,并以此显示一个唯一的值:

[xml]$file = get-content C:\ps_scripts\configs\test.xml


$xmlProperties = $file.SelectNodes("//input")
Foreach ($xmlProperty in $xmlProperties) {
    
        Echo $xmlProperty.className | Get-Unique
    }

但是,当我运行脚本时,我得到了3次打印相同的className值,而不是预期的1次:

PS C:\ps_scripts> .\xml2.ps1
com.ib.Feed.csv.TarCsvFileInput
com.ib.Feed.csv.TarCsvFileInput
com.ib.Feed.csv.TarCsvFileInput

在这种情况下如何正确显示唯一的className值?

该脚本的最终目的是遍历多个XML文件提取className元素内的所有唯一<input>值(我不知道存储在其中的className值大多数文件

解决方法

这很简单,只需更改

$xmlProperties = $file.SelectNodes("//input")
Foreach ($xmlProperty in $xmlProperties) {
    
        Echo $xmlProperty.className | Get-Unique
    }

$xmlProperties = $input.SelectNodes("//input") | Get-Unique
Foreach ($xmlProperty in $xmlProperties) {      
        echo $xmlProperty.className 
    }

输出:

com.ib.feed.csv.TarCsvFileInput

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。