(让我风险总体战略问题可能冒犯协议和为难我。)XSLT 1.0初步处理策略
我输入XML转换成HTML的元素乘元素转换之前,我需要确定的顺序其中将呈现元素。这样做需要递归分析,包括合并有序列表和跟踪图形,全部基于要呈现的元素的属性。
经过那个处理后,我实际上得到了一个有序的属性值列表,并且我将呈现按该列表排序的元素。
哪种策略更好?
1)将预分析的结果为一个全局变量,这将是属性值的列表,然后通过该列表循环,这样的事情:
<xsl:variable name=orderOfPresentation>
<xsl:call-template name="analyses">
</xsl:variable>
<xsl:template match="root">
<xsl:for-each select="$orderOfPresentation">
<xsl:apply-templates select="/" />
</xsl:for-each>
</xsl:template>
或
2)应用格式深的分析,一旦确定有序列表模板,没有收出递归,是这样的:
<xsl:template match="root">
<xsl:call-template name="analysis">
[with, as parameters, various sets of attribute nodes, extracted from the input XML]
</xsl:call-template>
</xsl:template>
<xsl:template name="analysis">
[recursions that include calls to sub-analysis]
</xsl:template>
<xsl:template name="sub-analysis">
[recursions that include calls to sub-sub-analysis]]
</xsl:template>
<xsl:template name="sub-sub-analysis">
[more work, which eventually produces an ordered list, $orderOfPresentation]
<xsl:for-each select="$orderOfPresentation">
<xsl:apply-templates select="/" />
</xsl:for-each>
</xsl:template>
在F第一种策略可能只是暴露程序语言程序员的想法,但似乎有利于在处理真正的变革业务之前让处理器清理干净。
但是,XLST 1.0(我必须在其中工作,没有扩展名)没有简单的方法来表示字符串值列表,并且(如果我正确理解这一点)只能传递回全局变量a Result树片段(我不明白的东西)。所以战略(1)看起来很糟糕。但是(2),一种从递归内部调用所有真实转换的策略似乎效率低下,难以维护。
这些策略之一是最佳实践吗?还是他们都是头脑混乱的证据?
环境是如何看待您的XSLT处理器从哪里调用的?是否有机会将第一个XSLT程序应用于排序,将结果XML存储在某处并通过第二个执行“XML到HTML”转换的XSLT程序来处理?这是我想在这里尝试的。 – 2012-01-05 17:30:42
转换正在客户端完成,在Web浏览器中。所以,不,我不能存储中间XML。 – JPM 2012-01-05 17:33:21
嗯,我对JavaScript没有太多了解,但是不可能通过使用JavaScript来达到目的?这个例子http://www.w3schools.com/xsl/xsl_client.asp看起来像它可以很容易地修改两次运行XSLT处理器。 – 2012-01-05 17:38:07