XMl auslesen

k_g

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:
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" );
}
}
 

geneticZ

Bekanntes Mitglied
Hi,
du musst die Liste mit einem Iterator durchlaufen und bei getChild den Namespace mit übergeben!
Bei genauerer Betrachtung stimmt da einiges nicht...
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:

k_g

Mitglied
ich mein mein code jetzt so geändert
java 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)
 

eRaaaa

Top Contributor
Naja
Code:
Anfragen
ist eine Liste, und kein
Code:
Element
o.ä. da gibts keine Methode
Code:
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:
		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)
 

k_g

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

eRaaaa

Top Contributor
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:
		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 :)
ich weis nicht wie man mit xPath arbeitet...
Mhm, das vereinfacht die Sache etwas, denn alles was du bräuchtest wäre
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());
 

k_g

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.
 

eRaaaa

Top Contributor
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:

k_g

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
 

k_g

Mitglied
ja weil ich keine ahnung habe wie das geht ;-)
ich hab bisher mit java halt nur sowas gemacht wie ein editor erstellen. Aber die ganzen sachen die im zusammenspiel mit Internet funktionieren habe ich noch nie gemacht.
 

k_g

Mitglied
ich weis gar nicht welche konkreten fragen ich stellen kann.
ich arbeite ja mit eclipse du sagst es geht da so einfach das mir das automatisch erstellt wird?
 

eRaaaa

Top Contributor
Ja siehe z.B. hier: Create a Web Service client using Eclipse

Allerdings weiss ich jetzt nicht mehr ob du evtl. etwas nachinstallieren musst (z.B. WTP o.ä.)

Ein bisschen Eigeninitiative wäre auch gut, steht eig. alles im Internet, bei konkreten Fragen oder Problemen kannst du ja dann nachfragen.

Ich war aber mal so frei und habe dir ein Eclipse-Projekt erstellt(und hier angehängt) wo die Java-Dateien schon generiert sind.
In dem Package
Code:
org.java.forum.app
ist eine main-Class die du dir mal anschauen kannst als Beispiel, ansonsten verweise ich auf die Doku: PEGELONLINE

Damit kannst du jetzt ein wenig rumspielen! (Eclipse: File - Import - General > Existing Project... - select archive File)
 

Anhänge

  • Messwerte.zip
    78,6 KB · Aufrufe: 7

k_g

Mitglied
hey danke
ja irgendwas muss ich bei mir noch nachinstallieren den bei mir lässt es sich nicht ausführen
aber danke ich werde mir das ganze mal durchlesen
 

k_g

Mitglied
ich habe jetzt mein problem anders gelöst. und zwar habe ich mir aus der wsdl eine xml anfrage zusammengestellt und über einen HTTP Client mit den Internet verbunden,so dass ich es verschicken kann und auch eine antwort zurück bekomme.
Mein Quelltext:
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URLEncoder;
import java.net.UnknownHostException;


public class test2 {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException, IOException {
		System.out.println("XML");
		    String data = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">  <soap:Body>    <getMessungenAktuell xmlns=\"http://pegelonline.wsv.de/webservices/version2_3/2007/10/31\">      <parameterName>WASSERSTAND ROHDATEN</parameterName>      <messstellenNummern></messstellenNummern>      <messstellenNamen>FRANKFURT OSTHAFEN</messstellenNamen>      <start>2011-05-26T00:00:00</start>      <ende>2011-05-26T14:00:00</ende>    </getMessungenAktuell>  </soap:Body></soap:Envelope>";
		    String hostname = "www.pegelonline.wsv.de";
		    int port = 80;
		    InetAddress addr = InetAddress.getByName(hostname);

		    System.out.println(addr.toString());
		    
		    Socket socket = new Socket(addr, port);


		    String path = "/webservices/version2_3/2007/10/31/PegelonlineWebservice";
		    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
			System.out.println("Writer");
		    wr.write("POST " + path + " HTTP/1.0\r\n");
		    wr.write("Content-Length: " + data.length() + "\r\n");
		    wr.write("Content-Type: text/plain; charset=UTF-8\r\n");
		    wr.write("SOAPAction: getMessungenAktuell\r\n");
		    wr.write("\r\n");

		    wr.write(data);
		    wr.flush();
		    
			System.out.println("Write");
			
		    BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		    String line;
		    while ((line = rd.readLine()) != null) {
		      System.out.println(line);
		    }
			System.out.println("While");
		    wr.close();
		    rd.close();
		    socket.close();
		  }


}

Das ganze funktioniert auch, nur jetzt ist das Probelm nur das Datum. Und zwar habe ich hier ein festes Datum in mein Quellcode eingebaut. Jedoch möchte ich natürlich die Daten von einem beliebigen Datum bekommen ohne jedesmal im Quellcode in der Anfrage das Datum verändern zu müssen. Also durch eine eingabe in meiner java anwendung wen diese ausgeführt wird?
 

eRaaaa

Top Contributor
Also durch eine eingabe in meiner java anwendung wen diese ausgeführt wird?

Och Mensch! Da gibts doch wieder tausend verschiedene Ideen, bitte genau erklären wie du dir das vorstellst!

- beim Start der Anwendung übergeben? (z.B. durch
Code:
java test2 deinDatum
) Dann wäre das args-Array die richtige Wahl
- eine kleine GUI mit Textfeld/DatePicker?
- soll das Programm auf der Konsole nach dem Datum fragen? Dann könntest du dir den Scanner/BufferedReader anschauen!
-....

Und wobei gibts bei der jeweiligen Variante Probleme?
 

k_g

Mitglied
ja also z.b. will ich das so machen das wen ich das Programm starte ein kleines fenster kommt wo man das datum eingibt und dann auf ok klickt und es dann erst meine anfrage ausführt...
 

eRaaaa

Top Contributor
Java:
String datum = JOptionPane.showInputDialog(null,"Bitte Datum eingeben","Datumseingabe",JOptionPane.PLAIN_MESSAGE);
//hier evtl. datum validieren ?!
und dann eben deinen data-String neu zusammensetzen mit dem Datum ?! :bahnhof:
 

k_g

Mitglied
eine anzeige wo steht bitte daum eingeben steht und dort die antwort in eine Variable zu speichern kann ich ja auch. das habe ich in c++ auch gemacht mit den cin und cout funktionen. Ich wusste eigentlich nicht wie ich dann meine eingabe grad in den einen bestimmten teil meiner anfrage übergebe. weil mir ist der zusammenhang auch nicht ganz klar. weil START in meiner xml anfrage ist ja ein Element oder halt das child eines Elements aus meiner xml anfrage. Und wenn ich ein Datum eingebe, speichere ich das doch in eine Variable(also so war das zumindestens in c++). Und wie übergebe ich dann einen wert aus einer variable in einen wert in einen Element einer XML..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JSON auslesen und Labels in GUI verwenden XML & JSON 13
M json page 2 auslesen XML & JSON 1
J Auslesen der Länge einer XML-Datei in Android Studio XML & JSON 8
Kanda Sorata Eingabefelder von Excel Dateien auslesen XML & JSON 1
K XML vernünftig auslesen XML & JSON 9
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
H SOAPBody auslesen XML & JSON 0
B XML auslesen, benötige Hilfe XML & JSON 13
I Liste in YAML Datei speichern und wieder auslesen XML & JSON 1
W XML einlesen und Attribute auslesen XML & JSON 1
A Leeres Array beim Auslesen von XML-Datei XML & JSON 4
M Json auslesen XML & JSON 7
K XML Auslesen, wie abspeichern? XML & JSON 32
D Attribute aus XML Auslesen XML & JSON 5
W Kindelemente mit JDOM eines bestimmten Attributes auslesen XML & JSON 6
R Apache POI: Gezieltes Auslesen von Zellen XML & JSON 2
S XMl auslesen:@ output ? XML & JSON 1
Z Verschachtelte XML auslesen XML & JSON 3
C JDOM: Value ohne Unterelemente auslesen XML & JSON 1
C XPath: Alle Kinder in einer Schleife auslesen XML & JSON 2
I XML IDs auslesen, erst X dann Y XML & JSON 2
S XML - rekursives auslesen - Zeilenumbruch als NodeValue? XML & JSON 3
O XML richtig auslesen XML & JSON 7
Kenan89 XML Tag-ID auslesen mit getElementById XML & JSON 2
J Excel zeilenweise auslesen - POI XML & JSON 5
J Excel Zellen auslesen - automatischer Stopp bei leerer Zelle XML & JSON 2
I XPath Namensräume und auslesen einzelner Knoten XML & JSON 3
S SVG auslesen und darstellen XML & JSON 5
G xpath: in Kindelement zwei Attribut-Werte auslesen XML & JSON 2
G xpath: Inhalt eines Kindelements auslesen XML & JSON 2
1 Html tabelle auslesen??? XML & JSON 6
JanUlrich Tabelle auslesen XML & JSON 2
A XSl mit JDom auslesen XML & JSON 1
J Anzahl der Elemente in einem XML-Dokument auslesen XML & JSON 7
P Poi /XSSF : Excel-Tabelle auslesen XML & JSON 2
S XSD-Datei zulässige Werte auslesen XML & JSON 3
D rss auslesen XML & JSON 2
S Attribute von Elementen auslesen mit XPath XML & JSON 2
M Große Datei auslesen/in dieser suchen XML & JSON 2
M RSS-Datei auslesen von Yahoo Webservice XML & JSON 4
N Google Wetter XML (nur current_condition) auslesen mit Java XML & JSON 15
J Dateinamen beim Start auslesen XML & JSON 8
eQuest XML Jaxen Attribute auslesen XML & JSON 2
E XML Datei mit DOM auslesen (Text mit Attributen) XML & JSON 2
P jdom XML-Encoding auslesen XML & JSON 12
H XML Attribute auslesen XML & JSON 5
Nicer Bestimmten Wert aus einer XML Auslesen XML & JSON 34
L XML Daten auslesen und in Tabelle (Array) speichern XML & JSON 1
L XML Dokument auslesen funktioniert nicht richtig XML & JSON 2
C Attributwert aus XML auslesen XML & JSON 10
H XML String auslesen XML & JSON 4
E XML Knoten mit rekursiver Methode auslesen XML & JSON 3
S Dom Baum auslesen XML & JSON 12
J Properties auslesen (Jar) XML & JSON 1
S auslesen XML & JSON 9
Z XML auslesen, Elemente daraus entfernen und als neue XML zurückgeben XML & JSON 2
M XMI-Datei auslesen XML & JSON 4
T EXSD auslesen mit XPath und JDOM XML & JSON 8
M XML-Datum als Referenz auf Objekt-Variable auslesen XML & JSON 5
Spot84 xmi auslesen XML & JSON 20
G Welche Klassen zum erzeugen/auslesen eines XML Files verwend XML & JSON 9
G Xml File schematisch auslesen XML & JSON 2
P NullPointerException beim Auslesen XML & JSON 8
N XML-String in MIDP auslesen XML & JSON 3
H mit JDOM Verarbeitungsanweisungen und Kommentare auslesen XML & JSON 2
K XML auslesen (simpel) XML & JSON 10
X XML File auslesen/parsen u. in ne Hashmap speichern XML & JSON 2
HeRaider Definitionen auslesen und Encoding XML & JSON 3
A SVG Datei auslesen und Batik XML & JSON 1
M XML werte auslesen ! XML & JSON 3
M XML File während Applet-Start auslesen? XML & JSON 10
L SAXReader , auslesen bis zum bestimmten knoten! XML & JSON 3
W XML DomDocument als String auslesen XML & JSON 2
T XML mit JDOM auslesen => langsam? XML & JSON 7
N XML Datei auslesen / Validierung XML & JSON 4
G einzelne tags mit jdom auslesen XML & JSON 4
F XML mit JDOM auslesen XML & JSON 2
N bestimmtes Element auslesen - ich verzweifel XML & JSON 3
A XML-File auslesen, alles leer? XML & JSON 2
H Elemente eines Node auslesen XML & JSON 2
H Xpath kindelemente auslesen XML & JSON 2
P [Solved] XSL: Element-Variable auslesen XML & JSON 2
A Internetinhalte auslesen und in einem XML-File speichern XML & JSON 4
A Auslesen einer XML Datei XML & JSON 58
P Knoten-Attribute einer xsd-Datei in einem JTree auslesen XML & JSON 18
M Aus DTD's Klassen auslesen XML & JSON 2
M *.group() in File auslesen XML & JSON 4
T Einfach nur die Elemente einer XML Datei auslesen :( XML & JSON 10
R Problem beim Auslesen von Attributen XML & JSON 4
G Aus XML-Datei auslesen und als Java-Dialog ausgeben XML & JSON 3
D Eingehende XML Files Auslesen XML & JSON 3
T Prob: Auslesen XML File mit JDOM XML & JSON 2
W XML-Document auslesen XML & JSON 2
T Mehrere gleichnamige Unterelemente auslesen XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben