0

使用XMLUtils.marshalToString()来自 docx4j,我在两个 docx 文件的相同位置有以下内容(word/document.xml解压缩 .docx 后从对应的文件中提取)。这些是文件之间的唯一区别:

<w:t xml:space="preserve">换行。首先是</w:t>

<w:t xml:space="preserve">
 <w:r>
 <w:t xml:space="preserve">换行。</w:t>
 </w:r>
 <w:r>
 <w:t xml:space="preserve"> 首先是 </w:t>
 </w:r>
 </w:t>

在第一个文档中,<w:t>节点的输出如上。

但是,在第二个中,将<w:t>打印一个空节点,如下所示:

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

我在http://www.schemacentral.com/sc/ooxml/e-w_p-1.html检查了w:t架构,是一个有效的包含元素。w:r

编辑:上面的链接是w:p元素的架构,而不是w:t. 正确的链接w:t是:http ://www.schemacentral.com/sc/ooxml/e-w_t-1.html 。它清楚地显示了唯一可接受的内容w:t是字符串(不是 aw:r或任何其他标签)。因此(正如下面 Jason 的回答所建议的那样),来自的 XMLdocument.xml无效,并且(因此)没有被解组到 docx4j 中。因此,文本不可用于 XmlUtils.marshalToString() 的输出。

是什么阻止了第二个块被输出?

4

1 回答 1

0

您可以信任 marshalToString。

如果它返回一个空的 w:t,那是因为底层的 org.docx4j.wml.Text 对象有一个 null 或空值字段。

您需要查看应该填充的任何代码。

于 2012-07-11T22:43:15.517 回答