我有以下xml文件:
p1 p2
以及获取我的节点参数的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;
但事实证明,节点列表(列表)有5个孩子,包括"\t\n"
,而不是只有两个.我的代码有问题吗?我怎样才能得到我的两个节点?
谢谢!
选择时/config/a/b/
,您将选择所有子项b
,其中包括三个文本节点和两个元素.也就是说,鉴于上面的XML并且仅显示有问题的片段:
p1 p2
第一个孩子是跟随和前面的文本(空白)
p1 ...
.第二个孩子是第一个param
元素.第三个孩子是两个param
元素之间的文本(空白).等等.XML中不会忽略空格,尽管许多处理XML的形式都忽略它.
你有几个选择:
更改你的xpath表达式,使它只选择元素节点,如Ted Dziuba所建议的,或者
循环返回的五个节点,仅选择非文本节点.
你可以这样做:
for (int i = 0; i < nodes.getLength(); i++) { if (nodes.item(i).getNodeType() != Node.TEXT_NODE) { System.out.println(nodes.item(i).getNodeValue()); } }
您可以使用节点类型仅选择元素节点,或删除文本节点.