2012-07-11 62 views
0

使用docx4j中的XMLUtils.marshalToString(),我在兩個docx文件(在解壓縮.docx後從相應的word/document.xml中提取)中的相同位置處具有以下內容。這些文件之間的唯一不同之處:docx4j - 從XmlUtils.marshalToString()中省略的節點

 
<w:t xml:space="preserve">New line. First is </w:t> 

 
<w:t xml:space="preserve"> 
<w:r> 
<w:t xml:space="preserve">New line.</w:t> 
</w:r> 
<w:r> 
<w:t xml:space="preserve"> First is </w:t> 
</w:r> 
</w:t> 

在第一文件中,<w:t>節點輸出如上。

 
    <w:t xml:space="preserve"></w:t> 

我檢查w:t架構在http://www.schemacentral.com/sc/ooxml/e-w_p-1.htmlw:r是一個有效的包含的元素:

然而,在第二,一個空<w:t>節點如下打印。

編輯:上述鏈接是w:p元素的架構,而不是w:tw:t的正確鏈接是:http://www.schemacentral.com/sc/ooxml/e-w_t-1.html。它清楚地顯示了w:t唯一可接受的內容是一個字符串(不是w:r或任何其他標籤)。因此(正如Jason在下面的回答中所述),來自document.xml的XML是無效的,並且(因此)不被解組到docx4j中。因此,該文本不可用於XmlUtils.marshalToString()的輸出。

什麼是保持第二塊輸出?

回答

0

您可以信任marshalToString。

如果它返回一個空的w:t,那是因爲底層的org.docx4j.wml.Text對象有一個空值或空值字段。

你需要看看任何代碼應該填充的代碼。

+0

我查看了從哪裏讀取docx的輸出(由'WordprocessingMLPackage.load'觸發),並發現:WARN org.docx4j.jaxb.JaxbValidationEventHandler .handleEvent line 90 - [ERROR]:unexpected element(uri:「 http://schemas.openxmlformats.org/wordprocessingml/2006/main「,local:」r「)。預期的元素ar'。 這使我再次看到@上面的鏈接,並將mea culpa插入到上面的原始問題中。 簡答:我們試圖從docx的document.xml中讀取的XML是無效的。 – 2012-07-12 15:23:33