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());
我试图在 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());