XMl auslesen

Diskutiere XMl auslesen im XML und Co. Forum; Hallo ich hab eine xml dokument welches ich auslesen will das xml sieht wie folgt aus: <?xml version="1.0" encoding="utf-8"?>...

  1. k_g
    k_g Neues Mitglied
    Hallo ich hab eine xml dokument welches ich auslesen will
    das xml sieht wie folgt aus:
    [XML]<?xml version="1.0" encoding="utf-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
    <getMessungenAktuellResponse xmlns="http://pegelonline.wsv.de/webservices/version2_3/2007/10/31">

    <getMessungenAktuellReturn>
    <messwert>155.000</messwert>
    <tendenz>-99</tendenz>
    <zeitpunkt>2011-05-26T00:00:00.000Z</zeitpunkt>
    </getMessungenAktuellReturn>[/XML]

    in meinen java Code habe ich so angefangen jedoch bekomme ich nur fehler und es passiert nix. Weis jemand was ich falsch mache
    java code:
    Code (Java):

                   
    public class XML {
       
        public static void main (String[]args) throws JDOMException
    {
            String filename = "response.xml";
            Document doc = new SAXBuilder().build( response.xml );
            Element getMessungenAktuellResponse = doc.getRootElement();
            List Antworten = MessungenAktuellResponse.getChildren( "getMessungenAktuellReturn" );
            String getraenk = Antworten.getChildText( "messwert" );
    }
    }
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. geneticZ
    geneticZ Neues Mitglied
    Hi,
    du musst die Liste mit einem Iterator durchlaufen und bei getChild den Namespace mit übergeben!
    Bei genauerer Betrachtung stimmt da einiges nicht...
    Code (Java):

    this.doc = new SAXBuilder().build(xmlFile);
    Element root = doc.getRootElement();
    Namespace ns = root.getNamespace();
    List<?> childList = root.getChildren();
    //Mit einem Iterator diese Liste durchlaufen
    Iterator<?> iter = childList.iterator();
        while (iter.hasNext()) {
            Element group = (Element)iter.next();
            Element groupHeader = group.getChild("GroupHeader", ns);
        }
     
     
    Zuletzt bearbeitet: 30. Mai 2011
  4. k_g
    k_g Neues Mitglied
    ich mein mein code jetzt so geändert
    java code:
    Code (Java):

    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.Namespace;
    import org.jdom.input.SAXBuilder;

                   
    public class XML {
       
        public static void main (String[]args) throws JDOMException, IOException
    {
            String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
            Document doc = new SAXBuilder().build( filename );
            Element Envolpe = doc.getRootElement();
            Namespace ns = Envolpe.getNamespace();

            Element Body = Envolpe.getChild("Body");
            Namespace ns1 = Body.getNamespace();
            List Anfrage = Body.getChildren( "getMessungenAktuellResponse" );
            List  Antworten= Anfrage.getChildren("getMessungenAktuellReturn");
            Iterator<Element> i= Antworten.iterator();
            while(i.hasNext())
                    {
                Element e= i.next();
            String messwert = e.getChildText( "messwert",ns1 );
                    }
    }
    }
     
    es klappt treotzdem nicht besonders bei der List Antworten steht es ist ein fehler bei getChildren vorhanden (das er undifindet ist)
     
  5. eRaaaa
    eRaaaa Moderator
    Naja
    Code (Text):
    Anfragen
    ist eine Liste, und kein
    Code (Text):
    Element
    o.ä. da gibts keine Methode
    Code (Text):
    getChildren
    !

    Du solltest vllt auch erst einmal anfangen genau zu erklären was du versuchst aus der XML-Datei zu extrahieren! Den/die Messwert/e oder wie?
    Probiers dann mal so
    Code (Java):

            String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
            Document doc = new SAXBuilder().build(filename);
            Element envolpe = doc.getRootElement();
            Element body = envolpe.getChild("Body", envolpe.getNamespace());
            Namespace ns = Namespace.getNamespace("ns","http://pegelonline.wsv.de/webservices/version2_3/2007/10/31");
            List<Element> anfrage = body.getChildren("getMessungenAktuellResponse",ns);
            for (Element element : anfrage) {
                List<Element> antworten = element.getChildren("getMessungenAktuellReturn", ns);
                for (Element e : antworten) {
                    String messwert = e.getChildText("messwert", ns);
                    System.out.println(messwert.trim());
                }
            }
     
    (oder einfach XPath benutzen :D)
     
  6. k_g
    k_g Neues Mitglied
    ja genau ich hab die messwerte versucht mir anzeigen zu lassen.
    Danke dir. War jetzt mein fehler nur darin, das Elemente die Methode getchildren nicht benutzen?und du hast es jetzt mit for schleife gemacht, hätte ich das auch mit der while von mir hinbekomen?
    ich weis nicht wie man mit xPath arbeitet...
     
  7. eRaaaa
    eRaaaa Moderator
    Nein, Element hat diese Methode, aber die Klasse/Interface List nicht! getChildren liefert eben eine Liste von Elementen. D.h. du musst eben nun über diese Liste iterieren und kannst dann auf jedem Element wiederum getChildren aufrufen (wenn du willst) aber eben nicht direkt auf der Liste!
    Ja natürlich!
    Code (Java):

            Iterator<Element> it = anfrage.iterator();
            while (it.hasNext()) {
                List<Element> antworten = it.next().getChildren("getMessungenAktuellReturn", ns);
                Iterator<Element> it2 = antworten.iterator();
                while (it2.hasNext()) {
                    String messwert = it2.next().getChildText("messwert", ns);
                    System.out.println(messwert.trim());
                }
            }
     
    ist aber gefährlicher und mehr Schreibarbeit :)
    Mhm, das vereinfacht die Sache etwas, denn alles was du bräuchtest wäre
    Code (Java):

            String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
            Document doc = new SAXBuilder().build(filename);
            XPath xpath = XPath.newInstance("//ns:messwert");
            xpath.addNamespace(Namespace.getNamespace("ns", "http://pegelonline.wsv.de/webservices/version2_3/2007/10/31"));
            Element messwert = (Element) xpath.selectSingleNode(doc.getRootElement());
            System.out.println(messwert.getValue().trim());
     
     
  8. k_g
    k_g Neues Mitglied
    ok danke schön
    und jetzt habe ich noch eine frage zu der ich nicht unbedingt ein quellcode haben will sondern wissen will wie es Funktioniert.
    Also in meinen java code habe ich ja auf eine Datei zugegriffen die bei mir auf den pc abgespeichert ist. Das war eine Antwort XML auf eine XML-Anfrage von einer webseite. So jetzt will ich das ich diese anfrage durch mein Programm verschicke und dann die antwort so auslese wie die, die ich auf den pc habe.
     
  9. eRaaaa
    eRaaaa Moderator
    Naja die Methode build() nimmt eben nicht nur einen String an sondern auch eine URL! Oder eben Alternativ einen InputStream!! Das sollte dir helfen :)

    edit: scheint ja ein WebService mit einer wsdl zu sein, wieso benutzt du nicht einfach die und lässt dir den Client generieren? =)
     
    Zuletzt bearbeitet: 30. Mai 2011
  10. k_g
    k_g Neues Mitglied
    ja aber das ist komplizierter. Den meine URL verweist auf eine XML. Und in dieser sind sehr viele verschiedene Parameter die aufgerufen werden können. (z.b. gewässer liste, messstellenliste...) Und ich muss nur auf eins davon zugreifen. Und ich muss nur auf die aktuellenmessungen zugreifen , und das auch nur von einem gewässer.
    hier ist die url wenn du das siehst kannst du vielleicht besser verstehen was ich meine:

    http://www.pegelonline.wsv.de/webservices/version2_3/2007/10/31/PegelonlineWebservice?WSDL
     
  11. eRaaaa
    eRaaaa Moderator
    Naja das ist ja eine WSDL, (siehe mein edit) die enthält doch gar nicht die Werte die du haben willst? Wie schon im edit gesagt, wieso lässt du dir nicht einfach den entsprechenden Client(java Dateien) generieren aus der WSDL Datei?

    Siehe: Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 19.7 Daily Soap

    Oder noch einfacher das Ganze der Entwicklungsumgebung wie Eclipse machen lassen :D
     
Die Seite wird geladen...

XMl auslesen - Ähnliche Themen

Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen?
Mehrere JComboBoxen - wie die versch. Boxen mit ItemStateChange auslesen? im Forum AWT, Swing, JavaFX & SWT
Lebendige Variablen herauslesen
Lebendige Variablen herauslesen im Forum Allgemeine Java-Themen
NFC Tag UID auslesen.
NFC Tag UID auslesen. im Forum Plattformprogrammierung
Position von Pixeln in Bilder auslesen
Position von Pixeln in Bilder auslesen im Forum Allgemeine Java-Themen
ResultSet vollständig auslesen
ResultSet vollständig auslesen im Forum Datenbankprogrammierung
Thema: XMl auslesen