ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
943
943
EMPFEHLEN
-
Hi,
ich habe folgendes Problem:
Ich muss eine XML-Datei einlesen (und nutze dafür JDOM), die unterschiedliche Child-Nodes hat.
Z.B. also so etwas:
Code :1 2 3 4 5 6 7 8 9 10 11
<rootnode> <child> <subchild></subchild> <subchild></subchild> <textlines></textlines> </child> <child> <subchild></subchild> <textlines></textlines> </child> </rootnode>
Jetzt habe ich aber das Problem, dass ich nur an die Subchilds ran komme und die textlines nicht gefunden werden.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
NodeList listOfConfParams = doc.getElementsByTagName("child"); for (int i = 0; i < listOfConfParams.getLength(); i++) { Node firstNode = listOfConfParams.item(i); NodeList childNodes = firstNode.getChildNodes(); for (int y = 0; y < childNodes.getLength(); y++) { Node subNode = childNodes.item(y); if(subNode.getNodeName().equals("subchild"){ //funktioniert //saving values to collection }else if(subNode.getNodeName().equals("textlines"){ //funktioniert nicht //saving values to another collection } } }
Er findet allerdings immer nur subchild-Nodes und keine Textlines-Nodes, obwohl diese in der XML-Datei definitiv vorhanden sind.
Dort, wo eigentlich eine textlines-Node auftauchen sollte, steht als NodeName immer #text da.
Weiß hier jemand Hilfe oder sehe ich zufällig den Wald vor lauter Bäumen nicht im Moment?Geändert von 00d4vid (22.03.10 um 13:36 Uhr)
Hallo Nuray!
-
Hi,
und du bist sicher, dass du auch jdom nutzt?
Denn zum Beispiel weder in jdom 1.1.1, noch in jdom 1.0 gibt es die Klasse Node, von anderen Methoden die du nutzt ganz zu schweigen..
Naja, so funktioniert es jedenfalls in jdom:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
import java.io.IOException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.jdom.*; import org.jdom.input.SAXBuilder; import org.xml.sax.InputSource; public void test(){ try { SAXBuilder sxbuild = new SAXBuilder(); InputSource is = new InputSource("C:/test.xml"); Document doc = (Document) sxbuild.build(is); Element root = doc.getRootElement(); List<Element> listOfConfParams = (List<Element>) root.getChildren("child"); for (int i = 0; i < listOfConfParams.size(); i++) { Element firstNode = listOfConfParams.get(i); List<Element> childNodes = firstNode.getChildren(); for (int y = 0; y < childNodes.size(); y++) { Element subNode = childNodes.get(y); //funktioniert if (subNode.getName().equals("subchild")) { System.out.println("subchid gefunden"); } else if (subNode.getName().equals("textlines")) { System.out.println("textlines gefunden"); } } } } catch (IOException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } catch (JDOMException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } }
-
Hrmpf sorry...
JDOM ist falsch - manchmal sollte ich denken bevor ich schreibe...
Code java:1 2 3 4 5
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
An und für sich müsste es da aber doch sehr ähnlich funktionieren oder?
Falls nicht, muss ich wohl die API wechseln, da das noch öfter vorkommen wird.
Danke schonmal für die schnelle Antwort!Hallo Nuray!
-
Hi,
wenn ich deinen Code zu einem lauffähigen Programm erweitere und genau die xml Daten nehme, klappt es ohne Probleme bei mir:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
public class Test { /** * Konstruktor */ public Test() { try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse(new File("c:/test.xml")); NodeList listOfConfParams = doc.getElementsByTagName("child"); for (int i = 0; i < listOfConfParams.getLength(); i++) { Node firstNode = listOfConfParams.item(i); NodeList childNodes = firstNode.getChildNodes(); for (int y = 0; y < childNodes.getLength(); y++) { Node subNode = childNodes.item(y); if (subNode.getNodeName().equals("subchild")) { System.out.println("subchild gefunden"); } else if (subNode.getNodeName().equals("textlines")) { System.out.println("textlines gefunden"); } } } } catch (SAXException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } catch (ParserConfigurationException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String[] argv) { new Test(); } }
3 Möglichkeiten fallen mit ein.
1.: Da der Code, den du gepostet hast, nicht der ist, der auch bei dir läuft (denn zum Beispiel sind in deinem Beispiel noch Klammer Fehler vorhanden), gibt es vielleicht nocht andere Abweichungen, weshalb es bei dir nicht klappt.
2.: Nochmal die XML Datei überprüfen, dass da keine Tippfehler sind.
3.: Vielleicht ein Problem mit dem Dateiformat, obwohl ich das nicht so ganz glaube. Meine XML Datei ist jedenfalls im ANSI Format.
Grüße!
-
Ich habe es mit JDOM erledigt und dein Beispiel an meine Bedürfnisse angepasst.
Hallo Nuray!
Ähnliche Themen
-
Tabelle füllen nach parent/child oder child/child beziehung?
Von cemiboy im Forum Relationale DatenbanksystemeAntworten: 13Letzter Beitrag: 16.04.08, 13:36 -
nodes im Properties Window
Von sirvival im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 06.03.08, 18:42 -
XML Nodes mit PHP Verschieben (UP & DOWN)
Von Badgott im Forum XML TechnologienAntworten: 0Letzter Beitrag: 28.04.05, 11:57 -
TreeView Nodes
Von mirist im Forum .NET ArchivAntworten: 3Letzter Beitrag: 04.10.04, 17:25 -
MDI-Child soll ein anderes MDI-Child aufrufen
Von MikeGK im Forum .NET ArchivAntworten: 2Letzter Beitrag: 19.08.04, 12:44





Zitieren
Login





