是否有一种简单易行的方法来检查我从xpath评估的NodeList是否实际包含任何子节点,或者它是否只是空标签? 以这个简单的xml为例:
<shop>
<shoes>brand1</shoes>
<tshirt>brand2</tshirt>
<socks>brand3</socks>
</shop>
如果我跑
NodeList nodeList = (NodeList) path.evaluate("/shop", myDocument, XPathConstants.NODESET);
我会得到一个很好的NodeList,我可以从中提取各种鞋子,T恤和袜子的价值。没关系。但是,如果我有一个看起来像这样的xml:
<shop>
</shop>
运行相同的命令会给我一个长度为1的NodeList,如果我已经知道它什么都不包含,我宁愿不继续提取过程。
除了检查是否nodeList.item(0).getChildNodes().getLength() == 1
之外,还有其他方法可以检查空的childNodes吗?
答案 0 :(得分:0)
您可以使用"/shop/*"
xpath和getLength()
方法进行检查。像这样:
public static void main(String[] args)
throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
String myDocumentStr = "<shop><shoes>brand1</shoes><tshirt>brand2</tshirt><socks>brand3</socks></shop>";
Node myDocument = getNode(myDocumentStr);
XPathExpression path = XPathFactory.newInstance().newXPath().compile("/shop/*");
NodeList nodeList = (NodeList) path.evaluate(myDocument, XPathConstants.NODESET);
System.out.println(nodeList.getLength());
myDocumentStr = "<shop></shop>";
myDocument = getNode(myDocumentStr);
nodeList = (NodeList) path.evaluate(myDocument, XPathConstants.NODESET);
System.out.println(nodeList.getLength());
}
private static Node getNode(String myDocumentStr) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Node myDocument = builder.parse(new ByteArrayInputStream(myDocumentStr.getBytes()));
return myDocument;
}
输出:
3
0