我需要根据排序组中的前一个兄弟来运行条件操作。我知道previous-sibling函数作用于原始文档,而不是排序结果。有没有办法对排序结果列表进行操作?我不认为muenchian分组方法是我需要的,因为我不想基于前面的兄弟分组。
鉴于下面的xml,我想按容器的值排序,然后测试以查看previous-sibling的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>
感谢。
答案 0 :(得分:0)
我不知道如何在不使用扩展程序的情况下使用XSLT 1.0执行此操作。所以我要么使用XSLT 2.0,要么如果你有一个用枪指着你的人喊着你应该使用XSLT 1.0 ,那么你可以创建一个带有两个XSLT步骤的管道,在一个第一步,过滤一秒。