使用這個XPath 1.0表達式:
/Stats/Stat
[Data/@Name='Entity'
and
not(Data[@Name='Entity'] = following-sibling::Stat/Data[@Name = 'Entity'])
]
/Data[@Name='Entity']
XSLT - 基於驗證:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/Stats/Stat
[Data/@Name='Entity'
and
not(Data[@Name='Entity'] = following-sibling::Stat/Data[@Name = 'Entity'])
]
/Data[@Name='Entity']
"/>
</xsl:template>
</xsl:stylesheet>
當該變換被應用上以下XML文檔(由cor recting的形成非共以及提供的文本):
<Stats>
<Stat>
<Data Name="Value">63.76</Data>
<Data Name="Entity">first</Data>
</Stat>
<Stat>
<Data Name="Value">51.23</Data>
<Data Name="Entity">second</Data>
</Stat>
<Stat>
<Data Name="Value">46.1</Data>
<Data Name="Entity">third</Data>
</Stat>
<Stat>
<Data Name="Value">61.21</Data>
<Data Name="Entity">first</Data>
</Stat>
</Stats>
以上的XPath表達式,並且所述選擇的節點被複制到輸出:
<Data Name="Entity">second</Data>
<Data Name="Entity">third</Data>
<Data Name="Entity">first</Data>
注:如果只是需要文本節點(「第一」,「第二」和「第三」),只需使用此單個XPath表達式:
/Stats/Stat
[Data/@Name='Entity'
and
not(Data[@Name='Entity'] = following-sibling::Stat/Data[@Name = 'Entity'])
]
/Data[@Name='Entity']
/text()
Bouke Groeneschei j:我的回答有用嗎?或者您還有問題嗎? –
duplicate-> http://stackoverflow.com/questions/3016929/selecting-unique-records-in-xslt-xpath – rt2800
我看過這篇文章,但是 - 我不認爲這是重複的。 XML代碼中有: 63.76 第一 我的XML代碼: <數據名稱= 「值」> 63.76 <數據名稱= 「實體」>第一個 –