Xpath отображает правильные результаты в XMLSpy, но ноль в Java

Я пытаюсь отобразить весь текст только внутри текстовых узлов, в XML-документе XFA, игнорируя пространства имен.

Я придумал Xpath, который возвращает желаемые результаты в XMLSpy с xpath 1.0, но тот же Xpath в Java по какой-то причине возвращает нуль.

Xpath = //*[local-name()='text'][string-length(normalize-space(.))>0]


    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();
    ArrayList<String> list = new ArrayList<>();

    XPathExpression expr = xpath.compile("//*[local-name()='text'][string-length(normalize-space(.))>0]");


    NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
    for (int i = 0; i < nodes.getLength(); i++) {
        System.out.println("This prints null = " + nodes.item(i).getNodeValue());
    }

Файл XML не будет опубликован здесь, поэтому его можно просмотреть по ссылке ниже: https://drive.google.com/file/d/1n-v3gzT-3GgxNnYKFUvMPjRQmtnkqcpY/view?usp=sharing

1 ответ

Решение

Проблема в том, что это не <text> элементы, которые содержат значения, но их дочерние текстовые узлы.

Заменить линию

    System.out.println("This prints null = " + nodes.item(i).getNodeValue());

с

    System.out.println("This does not print null = " + nodes.item(i).getFirstChild().getNodeValue());
Другие вопросы по тегам