用于排序组的XSLT 1.0前-兄弟



我需要在排序组中基于前面的兄弟节点运行一个条件操作。我知道前面的兄弟函数作用于原始文档,而不是排序的结果。是否有一种方法来操作排序结果列表?我不认为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步骤的管道,第一步进行排序,第二步进行过滤。

相关内容

  • 没有找到相关文章

最新更新