解析XML文件并跳过标记

时间:2010-12-13 17:18:05

标签: java xml

我想检索测试标签下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; 感谢

3 个答案:

答案 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

}

一个不善言辞的解决方案,但它适合