Xpath 在 XMLSpy 中显示正确的结果,但在 Java 中显示为空

Xpath display correct results in XMLSpy but null in Java

我试图在 XFA XML 文档中仅显示文本节点内的所有文本,同时忽略命名空间。

我想出了一个 Xpath,它 returns 在 XMLSpy with xpath 1.0 中得到了想要的结果,但在 Java returns 中得到了相同的 Xpath null 出于某种原因。

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 文件不会在 post 此处,因此可以在下面的 link 中查看: https://drive.google.com/file/d/1n-v3gzT-3GgxNnYKFUvMPjRQmtnkqcpY/view?usp=sharing

问题是包含值的不是 <text> 元素,而是它们的子文本节点。

替换行

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

    System.out.println("This does not print null = " + nodes.item(i).getFirstChild().getNodeValue());