0

我想使用 docx4j 从 DOCX 文件中提取所有粗体文本,但我得到一个类转换异常,代码如下:

import java.util.List;
import javax.xml.bind.JAXBException;
import org.docx4j.Docx4J;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.wml.Text;

public class Main
{
    public static void main(String[] args) throws Docx4JException, JAXBException
    {
        var wordMLPackage = Docx4J.load(new java.io.File("input.docx"));
        var doc = wordMLPackage.getMainDocumentPart();
        System.out.println((Text)doc.getJAXBNodesViaXPath("//w:r[w:rPr/w:b]/w:t", false).get(0));
    }
}

错误是:

线程“主”java.lang.ClassCastException 中的异常:类 javax.xml.bind.JAXBElement 无法转换为类 org.docx4j.wml.Text(javax.xml.bind.JAXBElement 和 org.docx4j.wml.Text 在Main.main(Main.java:37) 处加载程序“app”的未命名模块

为什么出现“w:t”不是一个实例org.docx4j.wml.Text以及我如何获取文本?

4

1 回答 1

0

显然,我尝试的方式仅适用于 R(运行)元素,文本节点似乎嵌套得更深。我可以按如下方式提取文本:

System.out.println( ((JAXBElement<Text>)doc.getJAXBNodesViaXPath("//w:r[w:rPr/w:b]/w:t", false) .get(0)).getValue().getValue());

于 2019-06-13T12:02:09.660 回答