java XSLT收集数据
我有一个简单的问题,我真的找不到解决办法,我需要你的帮助
主要问题是,在处理输入XML时,我需要在不同的地方“收集”信息。这意味着我真正需要做的就是调用一个特殊的模板,其参数如下:
<xsl:template name="append-section">
<xsl:param name="id" />
<xsl:param name="title" />
<!-- more code here -->
</xsl:template>
假设这个模板在XSLT过程中被调用了12次。在转换结束时,我想将这些数据写入一个文件
我尝试将这些数据附加到一个全局变量,然后将结果写入文件。只有认识到变量在XSLT中并不是真正的变量。这个解决方案不起作用
第二种解决方案是使用xsl:result文档和一个临时文件。此解决方案会执行一些操作,例如始终将文件的以前内容复制到自身,但也会附加新数据,例如:
<xsl:template name="append-section">
<xsl:param name="id" />
<xsl:param name="title" />
<xsl:result-document method="html" href="tmp/tmp.html">
<xsl:value-of select="document(tmp.html)" />
<xsl:element name="li">
<xsl:element name="a">
<xsl:attribute name="class">
<xsl:value-of select="'so-dropdown-page-menu-list-button'" />
</xsl:attribute>
<xsl:attribute name="href">
<xsl:value-of select="'#'" />
<xsl:value-of select="$id" />
</xsl:attribute>
<xsl:value-of select="$title" />
</xsl:element>
</xsl:element>
</xsl:result-document>
</xsl:template>
这段代码可能并不完美,但我不得不不幸地意识到引发了以下异常:
Cannot write more than one result document to the same URI
这个解决方案似乎也是无效的
所以我的问题是:我如何实现这个简单的问题?从各个地方收集数据,并在转换结束时将其写入文件
我用撒克逊语
# 1 楼答案
您需要根据输出的结构而不是输入的结构来构造代码。当你在输入中遇到信息时,不要试图去做一些事情;当您需要生成输出的相关部分时,请执行这些操作
在某些情况下,这似乎效率低下,因为这意味着要多次访问同一输入。通常,这些低效率将被证明是明显的,而不是真实的。但首先要做的是让这种转变发挥作用;如果速度不够快,你可以再问我们一个问题