SaxonHE 9使用非常大的文件从XSLT创建多个文件

时间:2015-11-04 16:17:43

标签: xml xslt saxon

我使用Splitting XML into multiple files with XSLT中的信息来拆分大小为143M的XML文件。如果我手动从文件中取出一些记录,则以下模板的工作方式与上述链接相同。

    <xsl:template match="/">
        <xsl:for-each select="Report_Data/Report_Entry">
            <xsl:result-document method="xml" href="record-{position()}.xml">
                <xsl:copy-of select="."/>
            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>

我的问题似乎是当我将XSLT应用于较大的文档时,该文档不会创建文件,并且在创建文件时未提供输出时仅输出xml标头。

$ java -Xmx512M -jar /usr/local/bin/saxon9he.jar largefile.xml transform.xsl
<?xml version="1.0" encoding="UTF-8"?>

我在Cygwin工作并使用32位Java v1.7.0_55。

添加-t选项会产生以下输出:

Saxon-HE 9.6.0.5J from Saxonica
Java version 1.7.0_55
Stylesheet compilation time: 609.975948ms
Processing file:/C:/Users/username/Documents/Projects/xml/largefile.xml
Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
Building tree for file:/C:/Users/username/Documents/Projects/largefile.xml using class net.sf.saxon.tree.tiny.TinyBuilder
Tree built in 5.85596s (5855.960358ms)
Tree size: 6942834 nodes, 55451426 characters, 0 attributes
<?xml version="1.0" encoding="UTF-8"?>Execution time: 5.913265s (5913.265026ms)
Memory used: 402449896
NamePool contents: 40 entries in 37 chains. 8 URIs

该文件对于撒克逊人的HE版本来说太大了吗?是否有其他设置或原因导致我输出,而不是文件集合?

1 个答案:

答案 0 :(得分:3)

如果没有创建文件且你没有得到任何内存不足错误消息,那么我假设你的路径Report_Data/Report_Entry没有选择任何东西,主要原因通常是输入文件中的命名空间声明,例如<Report_Data xmlns="http://example.com/"><Report_Entry>...</Report_Entry></Report_Data>。 XSLT 2.0中最简单的修复方法是将xpath-default-namespace="http://example.com/"放在xsl:stylesheetxsl:transform元素上,然后您不需要更改已发布的样式表代码中的任何路径。