Java-Forum.org  

Zurück   Java-Forum.org > Java - Programmierung > XML und Co.

XML und Co.: XMl auslesen

Alle Fragen zu XML gehören hier hinein.

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 30.05.2011, 14:20   #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 Code: Quelltext in neuem Fenster öffnen
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  3. xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5.   <soapenv:Body>
  6.     <getMessungenAktuellResponse xmlns="http://pegelonline.wsv.de/webservices/version2_3/2007/10/31">
  7.  
  8.       <getMessungenAktuellReturn>
  9.         <messwert>155.000</messwert>
  10.         <tendenz>-99</tendenz>
  11.         <zeitpunkt>2011-05-26T00:00:00.000Z</zeitpunkt>
  12.       </getMessungenAktuellReturn>

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

 
Anzeige
 

AW: XMl auslesen



 
Alt 30.05.2011, 14:50   #2
geneticZ
 
XMl auslesen - Standard AW: XMl auslesen

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: Quelltext in neuem Fenster öffnen
  1. this.doc = new SAXBuilder().build(xmlFile);
  2. Element root = doc.getRootElement();
  3. Namespace ns = root.getNamespace();
  4. List<?> childList = root.getChildren();
  5. //Mit einem Iterator diese Liste durchlaufen
  6. Iterator<?> iter = childList.iterator();
  7.     while (iter.hasNext()) {
  8.         Element group = (Element)iter.next();
  9.         Element groupHeader = group.getChild("GroupHeader", ns);
  10.     }
 
Alt 30.05.2011, 15:58   #3
k_g
Themenstarter
 
XMl auslesen - Standard AW: XMl auslesen

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

es klappt treotzdem nicht besonders bei der List Antworten steht es ist ein fehler bei getChildren vorhanden (das er undifindet ist)
 
Alt 30.05.2011, 16:15   #4
eRaaaa
 
XMl auslesen - Standard AW: XMl auslesen

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

(oder einfach XPath benutzen )
 
Alt 30.05.2011, 16:25   #5
k_g
Themenstarter
 
XMl auslesen - Standard AW: XMl auslesen

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...
 
Alt 30.05.2011, 16:39   #6
eRaaaa
 
XMl auslesen - Standard AW: XMl auslesen

Zitat: 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!
Zitat:
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: Quelltext in neuem Fenster öffnen
  1. Iterator<Element> it = anfrage.iterator();
  2.         while (it.hasNext()) {
  3.             List<Element> antworten = it.next().getChildren("getMessungenAktuellReturn", ns);
  4.             Iterator<Element> it2 = antworten.iterator();
  5.             while (it2.hasNext()) {
  6.                 String messwert = it2.next().getChildText("messwert", ns);
  7.                 System.out.println(messwert.trim());
  8.             }
  9.         }
ist aber gefährlicher und mehr Schreibarbeit
Zitat:
ich weis nicht wie man mit xPath arbeitet...
Mhm, das vereinfacht die Sache etwas, denn alles was du bräuchtest wäre
Java Code: Quelltext in neuem Fenster öffnen
  1. String filename = "E:\\Dokumente und Einstellungen\\konstantin.grinspon\\Desktop\\response.xml";
  2.         Document doc = new SAXBuilder().build(filename);
  3.         XPath xpath = XPath.newInstance("//ns:messwert");
  4.         xpath.addNamespace(Namespace.getNamespace("ns", "http://pegelonline.wsv.de/webservices/version2_3/2007/10/31"));
  5.         Element messwert = (Element) xpath.selectSingleNode(doc.getRootElement());
  6.         System.out.println(messwert.getValue().trim());
 
Alt 30.05.2011, 17:20   #7
k_g
Themenstarter
 
XMl auslesen - Standard Danke

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.
 
Alt 30.05.2011, 17:24   #8
eRaaaa
 
XMl auslesen - Standard AW: XMl auslesen

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? =)
 
Alt 30.05.2011, 17:44   #9
k_g
Themenstarter
 
XMl auslesen - Standard AW: XMl auslesen

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
 
Alt 30.05.2011, 17:47   #10
eRaaaa
 
XMl auslesen - Standard AW: XMl auslesen

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
 
Antwort    

Zurück   Java-Forum.org > Java - Programmierung > XML und Co.

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen: XMl auslesen

Fritz!Box | Kleine Anwendung zum auslesen des WPA/WPA2 Schlüssels und auslesen ...
Fritz!Box | Kleine Anwendung zum auslesen des WPA/WPA2 Schlüssels und auslesen ...: Hallo, erstmal : Dieses Programm kann NUR an eurem eigenen Router angewendet werden (Soll ja nicht Illegal sein)! Ich will nur die Lücken in der FritzBox aufweisen und bin mir bewusst das einige...
Serialisierung: speichern und auslesen, auslesen klappt nicht
Serialisierung: speichern und auslesen, auslesen klappt nicht: Hallo! Ich habe gerade in meinem Java-Buch Serialisierung durchgenommen und wollte mal ein Adressbuch schreiben. Deshalb mein Prinzip: Per Switch-case kann man zwischen drei Optionen wählen. 1)...
Datenpakete auslesen / Ram auslesen
Datenpakete auslesen / Ram auslesen: Moinsen ich habe eine frage ob meine Idee überhaupt Umsetzbar ist und falls ja wie man da ran gehen sollte. Ich möchte aus einem Online Spiel die gesendeten Datenpakete die bei mir ankommen...
Spalten Namen auslesen und Zeilen daten auslesen
Spalten Namen auslesen und Zeilen daten auslesen: hi leute ich hab ne frage. wie kann ich die SpaltenNamen aus einer Access DB auszulesen und wie kann ich die daten einer zeile, die ich in einem jTable anzeige, auslesen und bearbeiten. Hoffe...
Zip-Archiv auslesen und Entry-Informationen auslesen
Zip-Archiv auslesen und Entry-Informationen auslesen: Hio. Ich entwickel gerade ein kleines Archivierprogramm. Es geht auch alles bestens nur kann ich nicht „richtig“ auf die ZipEntrys im Zip-Archiv zugreifen. D.h. ich kann schon den Namen auslesen,...




Sie betrachten gerade XMl auslesen