我有一个类似于以下内容的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<software>
<name>MozillaFirefox</name>
<version>31.3.0</version>
<installer_location>/Mozilla/Firefox/31.3.0.exe</installer_location
</software>
<software>
<name>GoogleChrome</name>
<version>35.7</version>
<installer_location>/Google/Chrome/35.7.msi</installer_location
</software>
<software>
<name>MozillaFirefox</name>
<version>33.4.0</version>
<installer_location>/Mozilla/Firefox/33.4.0.exe</installer_location>
</software>
</catalog>
这是我目前的代码:
#Load XML file into $catalogXML
[xml]$catalogXML = (Get-Content (C:\test.xml))
$softwareVersionsArray = $catalogXML.catalog.software
哪个输出:
name version installer_location
---- ------- ------------------
MozillaFirefox 31.3.0 /Mozilla/Firefox/31.3.0.exe
GoogleChrome 35.7 /Google/Chrome/35.7.msi
MozillaFirefox 33.4.0 /Mozilla/Firefox/33.4.0.exe
我需要协助编码,以便删除任何重复项,并且第一个条目是保留的条目(即显示Firefox 31.3.0并删除Firefox 33.3.4)。我尝试了各种XPath语句和Select -Unique过滤器无济于事。在此先感谢您的帮助!
答案 0 :(得分:2)
要获得所需的结果,您可以按name
分组元素:Group-Object name
;然后从每个组中选择第一个元素:ForEach-Object {$_.Group[0]}
。
$catalogXML.catalog.software|
Group-Object name|
ForEach-Object {$_.Group[0]}
答案 1 :(得分:0)
您还可以执行以下操作:
<xsl:for-each select="//name[not(preceding::name/. = .)]>
<xsl:value-of select=".">
</xsl:for-each>