tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
943
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    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!

  2. #2
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    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);
            }
        }
     

  3. #3
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    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!

  4. #4
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    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!
     

  5. #5
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Ich habe es mit JDOM erledigt und dein Beispiel an meine Bedürfnisse angepasst.
     
    Hallo Nuray!

Ähnliche Themen

  1. Tabelle füllen nach parent/child oder child/child beziehung?
    Von cemiboy im Forum Relationale Datenbanksysteme
    Antworten: 13
    Letzter Beitrag: 16.04.08, 13:36
  2. nodes im Properties Window
    Von sirvival im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 06.03.08, 18:42
  3. XML Nodes mit PHP Verschieben (UP & DOWN)
    Von Badgott im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 28.04.05, 11:57
  4. TreeView Nodes
    Von mirist im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 04.10.04, 17:25
  5. MDI-Child soll ein anderes MDI-Child aufrufen
    Von MikeGK im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 19.08.04, 12:44