我想检索测试标签下jar的值。我正在使用DOM解析器,有人可以帮助我。
<test name="1">
<jar>3</jar>
<jar>4</jar>
<subcomponent name="1">
<jar>5</jar>
</subcomponent>
</test>
<test name="2">
<jar>8</jar>
<jar>9</jar>
<subcomponent name="2">
<jar>11</jar>
</subcomponent>
</test>
现在,我只想检索&lt; jar&gt;低于&lt; test&gt;并忽略&lt; jar&gt;在&lt; subcomponent&gt;下通常,下面的代码。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
NodeList nodeLst = doc.getElementsByTagName("test");
for(int temp = 0; temp < nodeLst.getLength(); temp++){
Node nNode = nodeLst.item(temp);
Element eElement = (Element) nNode;
NodeList jarsList = eElement.getElementsByTagName("jar");
}
使用上面的代码,我得到了所有&lt; jar&gt;低于&lt; test&gt; 感谢
答案 0 :(得分:2)
你应该看看xpath。它完全是为你的情况而建的。
我认为这将是你需要的xpath:
//test/jar
或test
不一定需要是jar
的直接父母:
//test//jar[not(ancestor::subcomponent)]
使用Java部分我很抱歉,但我无法帮助你。
答案 1 :(得分:0)
您可以获取根元素,然后使用tag-name =“jar”获取其所有子元素:
Element root = doc.getDocumentElement();
java.util.List<Node> jars = new java.util.ArrayList();
NodeList children = root.getChildNodes();
int length = children.getLength();
for(int i=0; i<length; i++) {
Node current = children.item(i);
if(current.getNodeType()==Node.ELEMENT_NODE && "jar".equals(current.getNodeName())) {
jars.add(current);
}
}
请告诉我,如果它不起作用,我现在无法检查。
答案 2 :(得分:0)
您需要手动过滤它们
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
doc.getDocumentElement().normalize();
NodeList nodeLst = doc.getElementsByTagName("test");
for(int temp = 0; temp < nodeLst.getLength(); temp++){
Node nNode = nodeLst.item(temp);
Element eElement = (Element) nNode;
NodeList jarsList = eElement.getElementsByTagName("jar");
ArrayList<Element> testJars = new ArrayList<Element>();
for(int temp2 = 0; temp2 < jarsList.getLength(); temp2++ )
{
Node nNode2 = jarsList.item(temp2);
Element eElement2 = (Element) nNode2;
if (eElement2.getParent(equals(eElement))) testJars.add(eElement2);
}
// testJars now contains the elements taht you want
}
一个不善言辞的解决方案,但它适合