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());