XMl auslesen

XML und Co.: XMl auslesen

Alle Fragen zu XML gehören hier hinein.
12
  1. XMl auslesen #1
    k_g


    XMl auslesen - Standard XMl auslesen
    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:
    Java Code:
    1.  
    2.  
    3. public class XML {
    4.  
    5. public static void main (String[]args) throws JDOMException
    6. {
    7. String filename = "response.xml";
    8. Document doc = new SAXBuilder().build( response.xml );
    9. Element getMessungenAktuellResponse = doc.getRootElement();
    10. List Antworten = MessungenAktuellResponse.getChildren( "getMessungenAktuellReturn" );
    11. String getraenk = Antworten.getChildText( "messwert" );
    12. }
    13. }

  2. XMl auslesen #2
    geneticZ


    Hi,
    du musst die Liste mit einem Iterator durchlaufen und bei getChild den Namespace mit übergeben!
    Bei genauerer Betrachtung stimmt da einiges nicht...
    Java Code:
    1.  
    2. this.doc = new SAXBuilder().build(xmlFile);
    3. Element root = doc.getRootElement();
    4. Namespace ns = root.getNamespace();
    5. List<?> childList = root.getChildren();
    6. //Mit einem Iterator diese Liste durchlaufen
    7. Iterator<?> iter = childList.iterator();
    8. while (iter.hasNext()) {
    9. Element group = (Element)iter.next();
    10. Element groupHeader = group.getChild("GroupHeader", ns);
    11. }

  3. XMl auslesen #3
    k_g


    ich mein mein code jetzt so geändert
    java code:
    Java Code:
    1.  
    2. import java.io.IOException;
    3. import java.util.Iterator;
    4. import java.util.List;
    5.  
    6. import org.jdom.Document;
    7. import org.jdom.Element;
    8. import org.jdom.JDOMException;
    9. import org.jdom.Namespace;
    10. import org.jdom.input.SAXBuilder;
    11.  
    12.  
    13. public class XML {
    14.  
    15. public static void main (String[]args) throws JDOMException, IOException
    16. {
    17. String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
    18. Document doc = new SAXBuilder().build( filename );
    19. Element Envolpe = doc.getRootElement();
    20. Namespace ns = Envolpe.getNamespace();
    21.  
    22. Element Body = Envolpe.getChild("Body");
    23. Namespace ns1 = Body.getNamespace();
    24. List Anfrage = Body.getChildren( "getMessungenAktuellResponse" );
    25. List Antworten= Anfrage.getChildren("getMessungenAktuellReturn");
    26. Iterator<Element> i= Antworten.iterator();
    27. while(i.hasNext())
    28. {
    29. Element e= i.next();
    30. String messwert = e.getChildText( "messwert",ns1 );
    31. }
    32. }
    33. }


    es klappt treotzdem nicht besonders bei der List Antworten steht es ist ein fehler bei getChildren vorhanden (das er undifindet ist)

  4. XMl auslesen #4
    eRaaaa


    Naja [C]Anfragen[/C] ist eine Liste, und kein [C]Element[/C] o.ä. da gibts keine Methode [C]getChildren[/C]!

    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
    Java Code:
    1.  
    2. String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
    3. Document doc = new SAXBuilder().build(filename);
    4. Element envolpe = doc.getRootElement();
    5. Element body = envolpe.getChild("Body", envolpe.getNamespace());
    6. Namespace ns = Namespace.getNamespace("ns","http://pegelonline.wsv.de/webservices/version2_3/2007/10/31");
    7. List<Element> anfrage = body.getChildren("getMessungenAktuellResponse",ns);
    8. for (Element element : anfrage) {
    9. List<Element> antworten = element.getChildren("getMessungenAktuellReturn", ns);
    10. for (Element e : antworten) {
    11. String messwert = e.getChildText("messwert", ns);
    12. System.out.println(messwert.trim());
    13. }
    14. }


    (oder einfach XPath benutzen )

  5. XMl auslesen #5
    k_g


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

  6. XMl auslesen #6
    eRaaaa


    Zitat Zitat von k_g Beitrag anzeigen
    War jetzt mein fehler nur darin, das Elemente die Methode getchildren nicht benutzen?
    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!
    und du hast es jetzt mit for schleife gemacht, hätte ich das auch mit der while von mir hinbekomen?
    Ja natürlich!
    Java Code:
    1.  
    2. Iterator<Element> it = anfrage.iterator();
    3. while (it.hasNext()) {
    4. List<Element> antworten = it.next().getChildren("getMessungenAktuellReturn", ns);
    5. Iterator<Element> it2 = antworten.iterator();
    6. while (it2.hasNext()) {
    7. String messwert = it2.next().getChildText("messwert", ns);
    8. System.out.println(messwert.trim());
    9. }
    10. }

    ist aber gefährlicher und mehr Schreibarbeit
    ich weis nicht wie man mit xPath arbeitet...
    Mhm, das vereinfacht die Sache etwas, denn alles was du bräuchtest wäre
    Java Code:
    1.  
    2. String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
    3. Document doc = new SAXBuilder().build(filename);
    4. XPath xpath = XPath.newInstance("//ns:messwert");
    5. xpath.addNamespace(Namespace.getNamespace("ns", "http://pegelonline.wsv.de/webservices/version2_3/2007/10/31"));
    6. Element messwert = (Element) xpath.selectSingleNode(doc.getRootElement());
    7. System.out.println(messwert.getValue().trim());

  7. XMl auslesen #7
    k_g


    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.

  8. XMl auslesen #8
    eRaaaa


    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? =)

  9. XMl auslesen #9
    k_g


    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/webser...ebservice?WSDL

  10. XMl auslesen #10
    eRaaaa


    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

12
Ähnliche Themen zu XMl auslesen
  1. Fritz!Box | Kleine Anwendung zum auslesen des WPA/WPA2 Schlüssels und auslesen ...
    Von Anonym11001110 im Forum Codeschnipsel u. Projekte
    Antworten: 5
    Letzter Beitrag: 23.04.2012, 18:30
  2. Serialisierung: speichern und auslesen, auslesen klappt nicht
    Von kuzdu im Forum Java Basics - Anfänger-Themen
    Antworten: 14
    Letzter Beitrag: 01.03.2012, 16:10
  3. Datenpakete auslesen / Ram auslesen
    Von obi im Forum Allgemeine Java-Themen
    Antworten: 6
    Letzter Beitrag: 18.09.2009, 10:09
  4. Spalten Namen auslesen und Zeilen daten auslesen
    Von im Forum Datenbankprogrammierung
    Antworten: 17
    Letzter Beitrag: 21.03.2007, 17:26
  5. Zip-Archiv auslesen und Entry-Informationen auslesen
    Von Luma im Forum Allgemeine Java-Themen
    Antworten: 3
    Letzter Beitrag: 30.03.2005, 13:54
Sie betrachten gerade XMl auslesen