【问题标题】:w:t not an instance of org.docx4j.wml.Text?w:t 不是 org.docx4j.wml.Text 的实例?
【发布时间】:2019-10-28 00:11:25
【问题描述】:

我想使用 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));
    }
}

错误是:

线程“main”中的异常 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 的实例以及我如何获取文本?

【问题讨论】:

    标签: docx4j wordml


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2016-03-07
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2021-02-20
      相关资源
      最近更新 更多