w: t не является экземпляром org.docx4j.wml.Text? - PullRequest
0 голосов
/ 13 июня 2019

Я хочу извлечь весь жирный текст из файла DOCX, используя docx4j, но получаю исключение приведения класса с этим кодом:

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 не названымодуль загрузчика 'app') в Main.main (Main.java:37)

Почему вхождение "w: t" не является экземпляром org.docx4j.wml.Text и как я получаю текст вместо

1 Ответ

0 голосов
/ 13 июня 2019

Видимо, способ, которым я пробовал это, работает только с элементом R (run), текстовые узлы, кажется, вложены дальше. Я мог бы извлечь текст следующим образом:

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

...