我有以下xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<config>
<a>
<b>
<param>p1</param>
<param>p2</param>
</b>
</a>
</config>
Run Code Online (Sandbox Code Playgroud)
以及获取我的节点参数的xpath代码:
Document doc = ...;
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("/config/a/b");
Object o = expr.evaluate(doc, XPathConstants.NODESET);
NodeList list = (NodeList) o;
Run Code Online (Sandbox Code Playgroud)
但事实证明,节点列表(列表)有5个孩子,包括"\t\n",而不是只有两个.我的代码有问题吗?我怎样才能得到我的两个节点?
谢谢!
选择时/config/a/b/,您将选择所有子项b,其中包括三个文本节点和两个元素.也就是说,鉴于上面的XML并且仅显示有问题的片段:
<b>
<param>p1</param>
<param>p2</param>
</b>
Run Code Online (Sandbox Code Playgroud)
第一个孩子是跟随<b>和前面的文本(空白)<param>p1 ....第二个孩子是第一个param元素.第三个孩子是两个param元素之间的文本(空白).等等.XML中不会忽略空格,尽管许多处理XML的形式都忽略它.
你有几个选择:
你可以这样做:
for (int i = 0; i < nodes.getLength(); i++) {
if (nodes.item(i).getNodeType() != Node.TEXT_NODE) {
System.out.println(nodes.item(i).getNodeValue());
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用节点类型仅选择元素节点,或删除文本节点.