2 Stimmen

Parsen der XML-Datei und Überspringen von Tags

Ich möchte die Werte von jar unter test tag abrufen. Ich bin mit DOM-Parser, könnte jemand mir helfen, auf das gleiche.

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

Nun möchte ich nur <jar> unter <test> abrufen und <jar> unter <subcomponent> ignorieren. Typischerweise wird der Code unten.

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");
}

Mit dem obigen Code erhalte ich alle <jar> unterhalb von <test> Danke

2voto

Alin Purcaru Punkte 41895

Sie sollten wirklich einen Blick darauf werfen xpath . Es wurde genau für Ihre Situation gebaut.

Ich denke, das wäre der benötigte xpath:

//test/jar

oder wenn test muss nicht unbedingt der direkte Elternteil von jar :

//test//jar[not(ancestor::subcomponent)]

Mit dem Java-Teil kann ich Ihnen leider nicht helfen.

0voto

khachik Punkte 27252

Sie können das Root-Element abrufen und dann alle seine untergeordneten Elemente mit tag-name="jar" abrufen:

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);
  }
}

Bitte lassen Sie es mich wissen, wenn es nicht funktioniert, ich kann das im Moment nicht überprüfen.

0voto

stjohnroe Punkte 3108

Sie müssen diese manuell herausfiltern

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

}

Eine etwas unkonventionelle Lösung, aber sie passt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X