我有一个简单的问题,我真的找不到解决方法,我需要你的帮助。
主要问题是,在处理输入 XML 时,我需要在多个地方“收集”信息。这意味着我真正需要做的就是调用一个带有如下参数的特殊模板:
<xsl:template name="append-section">
<xsl:param name="id" />
<xsl:param name="title" />
<!-- more code here -->
</xsl:template>
假设这个模板在 XSLT 过程中被调用了 12 次。在转换结束时,我想将此数据写入文件。
我试图将此数据附加到全局变量中,然后将结果写入文件。在 XSLT 中只实现变量并不是真正的变量。该解决方案不起作用。
第二种解决方案是将 xsl:result-document 与一个临时文件一起使用。这个解决方案会做一些事情,比如总是将文件的先前内容复制到自己,但也会像这样附加新数据:
<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
该解决方案似乎也无效。
所以我的问题是:如何实现这个简单的问题?从各个地方收集数据并在转换结束时将它们写入文件。
我用撒克逊。