获取详细
问题描述:
我把建议从这里比较的docx文件:获取详细
然而,这条线:
Body newBody = (Body) org.docx4j.XmlUtils.unmarshalString(contentStr);
引发许多JAXB警告如:
WARN org.docx4j.jaxb.JaxbValidationEventHandler .handleEvent line 80 - [ERROR] : unexpected element (uri:"", local:"ins"). Expected elements are <{[?]}text>
INFO org.docx4j.jaxb.JaxbValidationEventHandler .handleEvent line 106 - continuing (with possible element/attribute loss)
这是可以理解的,因为org.docx4j.wml.Text
不指示处理任何嵌套标签和通过Docx4jDriver.diff()
写入字符串包含:
<w:t dfx:insert="true" xml:space="preserve"><ins>This</ins><ins> </ins><ins>first</ins><ins> </ins><ins>line</ins><ins> </ins><ins>has</ins><ins> </ins><ins>a</ins><ins> </ins></w:t>
因此,包含<ins>
标签Text.getValue()
调用返回一个空字符串。
我试图以编程方式确定两个docx文件之间的diff(原件+结果往返一个DOCX转换过程),使用建议的方法加上下面的代码:
Body newBody = (Body) org.docx4j.XmlUtils.unmarshalString(contentStr);
for (Object bodyPart : newBody.getContent()) {
if (bodyPart instanceof P) {
P bodyPartInCast = (P)bodyPart;
for (Object currentPContent : bodyPartInCast.getContent()) {
if (currentPContent instanceof R) {
R pContentCast = (R)currentPContent;
for(Object currentRContent : pContentCast.getContent()) {
if (currentRContent instanceof JAXBElement) {
JAXBElement rContentCast = (JAXBElement)currentRContent;
Object jaxbValue = rContentCast.getValue();
if (jaxbValue instanceof Text) {
Text textValue = (Text)jaxbValue;
System.out.println("Text: --> " + textValue.getValue());
}
}
}
}
}
}
}
所以,问题是:如果这不是处理两个文件之间差异细节的正确方法,那是什么?
我使用docx4j 2.8.0版和两个docx文件进行比较是: