2015-11-04 24 views
1

我使用來自Splitting XML into multiple files with XSLT的信息來拆分大小爲143M的XML文件。如果我手動將少量記錄從文件中取出,則以下模板按照上述鏈接中的建議操作。SaxonHE 9使用來自非常大的文件的XSLT創建多個文件

<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版本?是否有其他設置或理由讓我得到輸出,而不是文件集合?

+0

嘗試使用Saxon的'-t'命令行選項來查看它是否輸出任何消息,告訴您爲什麼創建文件失敗。 –

+0

謝謝。我已經添加了'-t'。在這種情況下,它看起來並不像它提供的那麼多。 – jktravis

+2

那麼在這種情況下,我假設'Report_Data/Report_Entry'路徑不會在輸入文檔中選擇任何內容。主要原因通常是命名空間,例如' ...'。你能告訴我們幾行真實的輸入嗎? –

回答

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元素上,那麼您不需要更改已發佈的樣式表代碼中的任何路徑。