我需要在排序组中基于前面的兄弟节点运行一个条件操作。我知道前面的兄弟函数作用于原始文档,而不是排序的结果。是否有一种方法来操作排序结果列表?我不认为muenchian分组方法是我所需要的,因为我不想基于前面的兄弟姐妹分组。
给定下面的xml,我想按容器的值排序,然后测试前一个兄弟(在排序结果中)的type属性是否不同,如果不同,我需要输出新的@type的值,但我不希望结果按@type排序。
XML<c>
<did>
<container id="cid1059023" type="Box">C 3</container>
<container id="cid1059004" type="Map-case">C 1</container>
<container id="cid1059002" type="Binder">OSxxx-3</container>
<container id="cid1059042" type="Box">OSxxx-1</container>
</did>
</c>
<c>
<did>
<container id="cid1059025" type="Box">C 4</container>
<container id="cid1059006" type="Map-case">C 2</container>
</did>
</c>
XSL <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="1.0">
<xsl:template match="/">
<table>
<xsl:for-each select="child::*/container[@id]">
<xsl:sort select="."/>
<tr>
<td class="container">
<xsl:if test="@type != preceding-sibling::*/@type">
<xsl:value-of select="@type"/>
</xsl:if>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
谢谢。
如果不使用扩展,我不知道如何在XSLT 1.0中做到这一点。所以我要么使用XSLT 2.0,或者,如果有人拿枪指着你大喊,你应该使用XSLT 1.0,然后你可以创建一个包含两个XSLT步骤的管道,第一步进行排序,第二步进行过滤。