问题描述
我试图从以下示例文件中提取存储在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次。
[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
该脚本的最终目的是遍历多个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