【问题标题】:docx4j - Nodes Omitted From XmlUtils.marshalToString()docx4j - 从 XmlUtils.marshalToString() 中省略的节点
【发布时间】:2012-07-11 15:13:17
【问题描述】:

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

换行。首先是

换行。 首先是

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

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

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

编辑:上面的链接是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() 无法输出文本。

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

【问题讨论】:

    标签: docx4j


    【解决方案1】:

    您可以信任 marshalToString。

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

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

    【讨论】:

    • 我查看了读取 docx 的输出(由 WordprocessingMLPackage.load 触发),发现:WARN org.docx4j.jaxb.JaxbValidationEventHandler .handleEvent line 90 - [ERROR] : unexpected element (uri:"http://schemas.openxmlformats.org/wordprocessingml/2006/main", local:"r"). Expected elements ar。这让我再次查看@上面的链接,我已经将mea culpa插入到上面的原始问题中。简短的回答:我们试图从 docx 的 document.xml 中读取的 XML 无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2016-07-27
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多