SaxonHE 9 使用 XSLT 从一个非常大的文件创建多个文件
SaxonHE 9 to create multiple files with XSLT from a very large file
我正在使用 Splitting XML into multiple files with XSLT 中的信息拆分一个大小为 143M 的 XML 文件。如果我手动从文件中取出一些记录,下面的模板将按照上面 link.
的建议工作
<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 header被创建。
$ 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
对于 Saxon 的 HE 版本来说文件太大了吗?是否有其他设置或原因导致我得到输出,而不是 collection 个文件?
如果没有创建文件并且您没有收到任何内存不足错误消息,那么我假设您的路径 Report_Data/Report_Entry
没有 select 任何内容,主要原因通常是输入文件中的名称空间声明,例如<Report_Data xmlns="http://example.com/"><Report_Entry>...</Report_Entry></Report_Data>
。 XSLT 2.0 中最简单的修复是将 xpath-default-namespace="http://example.com/"
放在 xsl:stylesheet
或 xsl:transform
元素上,这样您就不需要更改已发布的样式表代码中的任何路径。
我正在使用 Splitting XML into multiple files with XSLT 中的信息拆分一个大小为 143M 的 XML 文件。如果我手动从文件中取出一些记录,下面的模板将按照上面 link.
的建议工作 <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 header被创建。
$ 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
对于 Saxon 的 HE 版本来说文件太大了吗?是否有其他设置或原因导致我得到输出,而不是 collection 个文件?
如果没有创建文件并且您没有收到任何内存不足错误消息,那么我假设您的路径 Report_Data/Report_Entry
没有 select 任何内容,主要原因通常是输入文件中的名称空间声明,例如<Report_Data xmlns="http://example.com/"><Report_Entry>...</Report_Entry></Report_Data>
。 XSLT 2.0 中最简单的修复是将 xpath-default-namespace="http://example.com/"
放在 xsl:stylesheet
或 xsl:transform
元素上,这样您就不需要更改已发布的样式表代码中的任何路径。