SaxonHE 9 для создания нескольких файлов с XSLT из очень большого файла
Я использую информацию из раздела Разделение XML на несколько файлов с помощью XSLT для разделения файла XML размером 143M. Если я вручную вытащу несколько файлов из файла, следующий шаблон будет работать, как показано по приведенной выше ссылке.
<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 версии Saxon? Есть ли какая-то другая настройка или причина, по которой я получаю вывод, а не набор файлов?
1 ответ
Если файлы не созданы и вы не получили сообщение об ошибке "Недостаточно памяти", я предполагаю, что ваш путь 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:stylesheet
или же xsl:transform
элемент, то вам не нужно изменять пути в коде таблицы стилей, который вы опубликовали.