【发布时间】:2018-07-13 09:06:15
【问题描述】:
我想用 select distinct 之类的函数提取唯一值。 最终我最终将 xsl:key 组合与 for-each 结合使用。我已经设法获得了模型的独特价值,但我无法提取属于该模型的样式。
我试图整理一个示例 XML。
<PLAYER>
<ALBUM>
<MODEL>AA</MODEL>
<STYLE>BB</STYLE>
<NUMBER>1</NUMBER>
</ALBUM>
<ALBUM>
<MODEL>FF</MODEL>
<STYLE>GG</STYLE>
<NUMBER>2</NUMBER>
</ALBUM>
<ALBUM>
<MODEL>AA</MODEL>
<STYLE>BB</STYLE>
<NUMBER>3</NUMBER>
</ALBUM>
<ALBUM>
<MODEL>FF</MODEL>
<STYLE>GG</STYLE>
<NUMBER>4</NUMBER>
</ALBUM>
<ALBUM>
<MODEL>HH</MODEL>
<STYLE>JJ</STYLE>
<NUMBER>5</NUMBER>
</ALBUM>
</PLAYER>
我需要提取 MODEL 与其匹配的 STYLE 的唯一值。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:key name="model" match="/player/album/model/text()" use="." />
<xsl:template match="/">
<xsl:for-each select="/player/album/model/text()[generate-id()
= generate-id(key('model',.)[1])]">
<li>
<xsl:value-of select="model"/>
</li>
<li>
<xsl:value-of select="style"/>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
想要的结果:
<MODEL>AA</MODEL>
<STYLE>BB</STYLE>
<MODEL>FF</MODEL>
<STYLE>GG</STYLE>
<MODEL>HH</MODEL>
<STYLE>JJ</STYLE>
是否可以提取这些唯一的值对?
【问题讨论】:
-
那是 2.0 xslt
-
@KeefRiffhard 您应该始终说明您是否需要 XSLT 1.0 解决方案,因为大多数 XSLT 专家现在使用的是 2.0 或 3.0。
标签: xml xslt select distinct-values