有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您需要根据输出的结构而不是输入的结构来构造代码。当你在输入中遇到信息时,不要试图去做一些事情;当您需要生成输出的相关部分时,请执行这些操作

    在某些情况下,这似乎效率低下,因为这意味着要多次访问同一输入。通常,这些低效率将被证明是明显的,而不是真实的。但首先要做的是让这种转变发挥作用;如果速度不够快,你可以再问我们一个问题