Announcement

Collapse
No announcement yet.

JDom gibt was komisches aus...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JDom gibt was komisches aus...

    Hallo Leute

    nachdem ich kurz davor bin ganz zu verzweifeln, hoffe ich das ich mit eurer hilfe weiterkomme...


    mein test xml file:

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <party datum="10.10.2007">
    		
    		<gast nameOne="max muster">
    		        <name>max</name>
    			<getraenk>wein</getraenk>
    		</gast>
    		
    		<gast nameOne="heidi heidi">
    		        <name>heidi</name>
    			<getraenk>wasser</getraenk>
    		</gast>
    		
    		
    </party>

    und hier mal meine java code:

    Code:
    package ch.tests;
    
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    
    import org.jdom.DocType;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    
    public class reader {
    
      public static void main (String[] args){
        
        SAXBuilder builder = new SAXBuilder();
        Document doc = null;
        try {
          doc = builder.build("party.xml");
        } catch (JDOMException e) {
          System.out.println("sorry...");
          e.printStackTrace();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        
        XMLOutputter out = new XMLOutputter();
        System.out.println(out);
        //out.output(doc, System.out);
      
        
        System.out.println("-----------------------------------------");
      
        
        /*Das Root Element holen */
        Element party = doc.getRootElement();
    
        /*Das Child holen und in albert var speichern*/
        Element albert = party.getChild("gast");
    
        String n = albert.getAttributeValue("nameOne");
        System.out.println(n);    
        
        Element albertDrink = albert.getChild("getraenk");
        String drink = albertDrink.getText();
        System.out.println(drink);    
        
        Element guestName = albert.getChild("name");
        String gName = guestName.getText();
        System.out.println(gName);
        
        
        Element testMe = doc.getRootElement();
        List partyInfo = testMe.getContent();
        Iterator it = partyInfo.iterator();
        while (it.hasNext()){
          System.out.println(it.next().toString());
        }
           
      }
      
      
    }
    so und nun das problem. Die ausgabe der Liste partyInfo geht irgendwie in die hose...es wird nämlich das angezeigt:

    Code:
    [Text: 
    		
    		]
    [Element: <gast/>]
    [Text: 
    		
    				]
    [Element: <gast/>]
    [Text: 
    		
    		
    ]
    meiner meinung nach müssta aber folgende ausgegeben werden:

    Code:
    max muster
    heidi heidi


    ich hoffe jemand hat einen tip...?

    merci
    isa

  • #2
    Hallo Isa,

    Hoffe Du hast inzwischen einen JSP-Hoster gefunden

    Zu dem aktuellen Problem. Stören Dich die "[Text: ]"-Ausgaben? Das liegt an den whitespaces im XML. Nimm einfach getChildren() statt getContent() dann bekommst Du nur die Elemente in der Liste zurück und den Rest nicht. Stört Dich das "[Element: <gast/>]"? Das gibt JDOM einfach bei toString() für ein Element zurück. toString() ist mehr für debug-Zwecke. Wenn Du "max muster" und "heidi heidi" haben willst mußt Du Dir den attribute value für "nameOne" von dem jeweiligen Element holen (wie Du es ja weiter oben schon mal machst).

    Viele Grüße,

    Alwin
    Zuletzt editiert von Alwin Ibba; 17.03.2007, 19:55.

    Comment


    • #3
      hallo Alwin Ibba

      sag mal, du musst ja einiges mehr als ein Profi sein...Beängstigend zu was du alles eine Antwort hast

      JSP Hoster suche ich immer noch. Danke der Nachfrage Konnte aber noch nichts passendes finden...

      So, nun zum aktuellen Problem. Danke! Ich werde das gleich morgen mal ausprobieren.

      Vielen Dank
      Gruss
      Isa

      Comment


      • #4
        so, jetzt habe ich es mal versucht...


        nur scheitere ich hier:

        Code:
            List grafikPanelInfo = grafikPanel.getAttributeValue("nameOne");
            /*Mit der Methode getContent() wird eine Liste mit allen 
              Elementen und Unterelementen erzeugt*/
             
            //Mit einem Iterator kann diese Liste durchlaufen werden
            Iterator grafikPanelIterator = grafikPanelInfo.iterator();
            while ( grafikPanelIterator.hasNext() )
         
            {
              System.out.println( grafikPanelIterator.next().toString() );
            }
        logischerweise "type missmatch"

        jetzt weis ich nicht genau wie ich das "umwandeln" kann damit ich die werte in einer while schleife ausgeben kann...

        merci
        isa

        Comment


        • #5
          Hallo Isa,

          getAttributeValue(...); gibt ja keine Liste zurück sondern einen einzelnen attribute wert.

          Ausgehend von Deinem ursprünglichen Code meinte ich etwa so:

          Code:
          Element testMe = doc.getRootElement();
          List partyInfo = testMe.getChildren();
          Iterator it = partyInfo.iterator();
          while (it.hasNext()){
              Element element = (Element)it.next();
              System.out.println(element.getAttributeValue("nameOne"));
          }
          Ich weiß ja nicht was Du machen willst Auf jeden Fall kannst Du so durch alle Elemente des XML iterieren und irgendwas damit tun, also z.b. attribute eines einzelnen Elements abfragen. Daher auch getChildren() statt getContent(), bei getContent() sind nämlich auch Nicht-Elemente dabei (Text, ProcessingInstruction).

          Viele Grüße,

          Alwin

          Comment

          Working...
          X