我想使用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 加载程序“ app”的模块)位于Main.main(Main.java:37)
为什么出现“ w:t”不是org.docx4j.wml.Text
的实例,以及我如何获取文本呢?
答案 0 :(得分:0)
显然,我尝试过的方式仅适用于R(运行)元素,文本节点似乎进一步嵌套。我可以提取文本如下:
System.out.println(
((JAXBElement<Text>)doc.getJAXBNodesViaXPath("//w:r[w:rPr/w:b]/w:t", false)
.get(0)).getValue().getValue());