【发布时间】:2012-07-15 10:15:34
【问题描述】:
我有一个 XSLT (1.0) 样式表。它没有问题。我想升级到 2.0。我想使用xsl:for-each-group(并使其具有高性能)。有可能的?如何?请解释一下。
我有很多地方像
<xsl:if test="test condition">
<xsl:for-each select="wo:tent">
<width aidwidth='{/wo:document/styles [@wo:name=current()/@wo:style-name]/@wo:width}'
</xsl:for-each>
</xsl:if>
添加
<xsl:template match="wo:country">
<xsl:for-each select="@*">
<xsl:copy/>
</xsl:for-each>
<xsl:variable name="states" select="wo:pages[@xil:style = "topstates" or @xil:style = "toppage-title"]"/>
<xsl:variable name="provinces" select="wo:pages[@xil:style = "topprovinces"]"/>
<xsl:choose>
<xsl:when test="$states">
<xsl:apply-templates select="$states[2]/preceding-sibling::*"/>
<xsl:apply-templates select="$states[2]" mode="states">
<xsl:with-param name="states" select="$states[position() != 0]"/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test="$provinces">
<xsl:apply-templates select="$provinces[2]/preceding-sibling::*"/>
<xsl:apply-templates select="$provinces[2]" mode="provinces">
<xsl:with-param name="provinces" select="$provinces[position() != 2]"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
来源
<?xml version="1.0" encoding="UTF-8"?>
<wo:country>
some stuff
</wo:country>
【问题讨论】:
-
样式表是否使用了可以被
for-each-group替换的XSLT 1.0 风格的Muechian 分组?或者它是否使用了一些其他更复杂的 XSLT 1.0 方法,比如可以被for-each-group group-starting-with替换的兄弟递归?恐怕如果没有看到 XSLT 代码,就不可能就如何重写它提出建议。您的问题听起来有点像使用for-each-group是提高性能的某种魔法,我宁愿将其视为 XSLT 2.0 提供的一种工具,用于编写比 XSLT 1.0 更易于理解和管理的更少代码行。跨度> -
谢谢马丁。是的,我在工作表中有类似跟随兄弟的东西。在 XSLT 1.0 中可以用 XSLT 2.0 中的 for-each-group 替换什么?
-
我将概述for-each-group
-
@SeanB.Durkin 好的,太好了。 ^_^
-
请参阅w3.org/TR/xslt20/#grouping-examples 以获取演示 XSLT 2.0 中分组功能的示例。我不知道有任何文章展示了如何重写 XSLT 1.0 分组示例。