XML einlesen

Tino124

Mitglied
Hallo, nun hat mich mein Problem soweit in die Verzweiflung getrieben, dass ich nun meine erste Frage in einem Forum poste.

So, und zwar habe ich ein kleines Programm geschrieben das mir bestimmte Daten aus einer XML liest und das funktioniert auch so weit. Aber da mir das zu umständlich ist für jede Anfrage erst von der URL eine XML zu erstellen, habe ich weiter gemacht und das ganze direkt über die URL gemacht, so und nun sind wir an dem Punkt meiner Verzweiflung geraten, und zwar schaffe ich es den ganzen Inhalt über die Konsole auszugeben aber Ich brauche nur einzelne Daten. In meinem ersten Programm habe ich das über die Tags mit "getTagValue" realisiert. Nun lautet meine Frage gibts so etwas ähnliches auch wenn ich das über die URL abrufe ?

Hier einmal mein Code:





Java:
	import java.io.ByteArrayOutputStream;
	import java.io.InputStream;
	import java.net.URL;
	import java.net.URLConnection;
	import javax.swing.JOptionPane;

	
public class Reader {
	 
	public static void main(String argv[]) {
	
	 try {
	 
	 // Verbindung aufbauen
	 URL url = new URL("xy.xml");
	 URLConnection connection = url.openConnection();
	 
	 // XML Daten einlesen
	 ByteArrayOutputStream result = new ByteArrayOutputStream();
	 InputStream input = connection.getInputStream();
	 byte[] buffer = new byte[1000];
	 int amount = 0;    
	 
	 // Inhalt lesen
	 while(amount != -1){
	 
	   result.write(buffer, 0, amount);
	   amount = input.read(buffer);
	   
	   System.out.println(result.toString());
	   
	 }
	 
	 }catch(Exception e){
	 // Fehlermeldung
	 JOptionPane.showMessageDialog(null,"Es konnte keine Verbindung mit dem Internet hergestellt werden. Ist ein Proxy nötig?","Verbindungsproblem",JOptionPane.ERROR_MESSAGE);

}
}
}


MfG. Tino
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Also ich verstehe das eigentliche Problem nicht? Bzw der Unterschied ist mir nicht ganz klar.
Wie sah dein erste Ansatz aus? Was meinst du mit "Aber da mir das zu umständlich ist für jede Anfrage erst von der URL eine XML zu erstellen"
Laut der URL in deinem Code gibts doch bereits schon eine xml-Datei?! Gibt doch jede Menge xml-Parser der man eine URL oder einen Stream übergeben kann....

Was für Daten brauchst du denn?
Man könnte das ziemlich leicht mit einem XML-Parser und XPath machen, oder aber ähnlich deinem Einsatz mit einem Scanner und evtl. Regex...
 

turtle

Top Contributor
Ähnlich wie eRaaaa verstehe ich Dein Problem nicht richtig.

Zum BNispiel verstehe ich nicht, wofür hier eine URL-Verbindung gut sein soll? Natürlich kannst Du mit XML-Daten auch arbeiten, wenn diese zum Beispiel aus einer lokalen Datei kommen!

Wie eRaaaa schon richtig angemerkt hat, kann dies über einen "üblichen" XML-Parser geschehen. Eine Variante kann zum Beispiel der Zugriff auf die XML-Daten über dom4j sein. Eine andere könnte der Zugriff auf XML via JAXB sein.

Allen gemein ist, dass egal ist, woher die Daten kommen, also zum Beispiel von einer URL, oder von einem FileReader gelesen werden.

Du musst uns also mehr Infos geben, was Du mit den XML-Daten eigentlich machen möchtest.
 

AlexSpritze

Bekanntes Mitglied
Ich verstehe das so, dass du über die URL nicht das komplette XML abrufen willst, sondern schon vorher sagen willst, was du aus dem XML haben willst. Das geht leider nicht so einfach. Sogar eher gar nicht.
Wenn du aber schon eine Methode hast, die dir aus einem String, der dein XML repräsentiert, die entsprechenden Informationen raussuchst, dann kannst du ja eine zweite Methode schreiben, die dir diese XML als String aus einer URL besorgt. Und schon kannst du beide Methoden verbinden, um das gewünschte zu erreichen.
Wenn ich dich falsch verstanden haben sollte, muss ich auch um mehr Informationen zu deinem Problem bitten :)
 

Tino124

Mitglied
Also was ich eigentlich meine ist, das ich folgende URL habe : xy und von dieser einfach direkt die Daten die ich brauche abgreife.

So nun habe ich bei meinem ersten Anlauf eine XML-Datei von der Seite erzeugt indem ich sie einfach als XML abgespeichert habe und dann mittels dem XML Parser meine gewünschten Informationen ( Linie, Ziel, Platz, HF, Abfahrt) abgerufen. Aber da ich nicht von jeder Haltestelle ( die haben alle eine eigene URL) eine XML-Datei erzeugen möchte, ist mein erster Anlauf quasi für die Tonne. Ich möchte, dass das Programm direkt anhand der URL, mir die gewünschten Informationen ausgibt.

Hier noch einmal mein alter Quellcode, vielleicht verdeutlicht das ja nochmal den Unterschied.

Java:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
 
public class ReadXMLFile {
 
	public static void main(String argv[]) {
 
	  try {
 
		File fXmlFile = new File("c:\\bsp.xml");
		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
		Document doc = dBuilder.parse(fXmlFile);
		doc.getDocumentElement().normalize();
 
		System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
		NodeList nList = doc.getElementsByTagName("Abfahrt");
		System.out.println("-----------------------");
 
		for (int temp = 0; temp < nList.getLength(); temp++) {
 
		   Node nNode = nList.item(temp);
		   if (nNode.getNodeType() == Node.ELEMENT_NODE) {
 
		      Element eElement = (Element) nNode;
 
		  System.out.println("Linie : " + getTagValue("Linie", eElement));
		  System.out.println("Ziel : " + getTagValue("Ziel", eElement));
	          System.out.println("Platz : " + getTagValue("Platz", eElement));
	          System.out.println("HF : " + getTagValue("HF", eElement));
		  System.out.println("Abfahrt in : " + getTagValue("Zeit", eElement));
 
		   }
		}
	  } catch (Exception e) {
		e.printStackTrace();
	  }
  }
 
  private static String getTagValue(String sTag, Element eElement) {
	NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
 
        Node nValue = (Node) nlList.item(0);
 
	return nValue.getNodeValue();
  }
 
}

Gruß Tino
 
Zuletzt bearbeitet von einem Moderator:

ARadauer

Top Contributor
So nun habe ich bei meinem ersten Anlauf eine XML-Datei von der Seite erzeugt indem ich sie einfach als XML abgespeichert habe
das ist schon eine xml datei... du musst sie nicht speichern Document doc = dBuilder.parse dem kannst du auch einen InputStream übergeben. Den du dir von der URL Klasse hohlen kannst..
 

Tino124

Mitglied
Ich krieg´s nicht hin, gibt nicht noch einen anderen Weg? Ich will ja Prinzipiell nur eine Verbindung mit der Seite aufbauen und mir sagen lassen wann die nächste Bahn kommt und nicht wie im Beispiel oben den ganzen Seiten Inhalt angezeigt bekommen. Eigentlich machts ja das was ich will, ich will einfach nur einen das er mir nicht den ganzen Seiteninhalt ausspuckt sondern nur bestimmte Teile.

Also Hier noch einmal der link: xy
Und von diesem link möchte ich z.B Zeit, Linie und Ziel ausgegeben bekommen.
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Also ich verstehe noch immer nicht dein Problem, bzw du scheinst uns nicht zu verstehen. Du musst NICHT die XML erst in eine Datei lokal auf deinem Rechner speichern, sondern du kannst direkt von der URL lesen.
Deine Zeile 15 kannst du löschen und Zeile 18 wie folgt abändern:
Java:
Document doc = dBuilder.parse(new URL("xy").openStream());
 
Zuletzt bearbeitet von einem Moderator:

turtle

Top Contributor
Ich schlage XPath vor.

Nachdem Du Dein gesamtes XML (in doc) hast, kannst Du mit XPath zugreifen:
Java:
XPath xpath = XPathFactory.newInstance().newXPath();
  XPathExpression expr = xpath.compile("//Linien/Abfahrt/Zeit ()");

  Object result = expr.evaluate(doc, XPathConstants.NODESET);
  NodeList nodes = (NodeList) result;
  for (int i = 0; i < nodes.getLength(); i++) {
 System.out.println(nodes.item(i).getNodeValue()); 
  }
Der Path ist wahrscheinlich nicht richtig und/oder für Dich nicht vollständig.
 

Tino124

Mitglied
Achsoo... ups! Naja war schon mal ne hilfe aber wenn ich das nun durch die Zeile ersetze gibt er mir ne Fehlermeldung wegen dem .dBuilder aus.
 

Tino124

Mitglied
Ach nein, entschuldige. Ich bin völlig durch den Wind hab deine Antwort nicht richtig gelesen. Es Klappt scheinbar nun, nur bekomme ich bekomme ich nun statt meiner Ausgabe Folgendes :

java.lang.NullPointerException
at ReadXMLFile.getTagValue(ReadXMLFile.java:46)
at ReadXMLFile.main(ReadXMLFile.java:32)


DANKE eRaaa ! :)
 

eRaaaa

Top Contributor
???:L
Also nochmal von vorne, ich nehme deinen o.g. Code und ändere wie folgt (wie oben beschrieben) ab:
Java:
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
		Document doc = dBuilder.parse(new URL(
						"xy.php")
						.openStream());
		doc.getDocumentElement().normalize();

		System.out.println("Root element :"+ doc.getDocumentElement().getNodeName());
		NodeList nList = doc.getElementsByTagName("Abfahrt");
		System.out.println("-----------------------");

		for (int temp = 0; temp < nList.getLength(); temp++) {

			Node nNode = nList.item(temp);
			if (nNode.getNodeType() == Node.ELEMENT_NODE) {

				Element eElement = (Element) nNode;

				System.out.println("Linie : " + getTagValue("Linie", eElement));
				System.out.println("Ziel : " + getTagValue("Ziel", eElement));
				System.out.println("Platz : " + getTagValue("Platz", eElement));
				System.out.println("HF : " + getTagValue("HF", eElement));
				System.out.println("Abfahrt in : "
						+ getTagValue("Zeit", eElement));

			}
		}
	}

	private static String getTagValue(String sTag, Element eElement) {
		NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
		Node nValue = (Node) nlList.item(0);
		return nValue.getNodeValue();
	}
}

Ausgabe
Code:
Root element :Linien
-----------------------
Linie : 9
Ziel : Griesheim
Platz : 2
HF : #
Abfahrt in : 6
Linie : N
Ziel : Nieder-Ramstadt
Platz : 4
HF : #
Abfahrt in : 8
Linie : O
Ziel : Brandau
Platz : 3
HF : #
Abfahrt in : 8
Linie : 2
Ziel : Hauptbahnhof
Platz : 2
HF : #
Abfahrt in : 13
Linie : R
Ziel : Nordbahnhof
Platz : 5
HF : #
Abfahrt in : 21
Linie : 9
Ziel : Griesheim
Platz : 2
HF : #
Abfahrt in : 21
Linie : NE
Ziel : Neutsch
Platz : 6
HF : #
Abfahrt in : 23
Linie : 2
Ziel : Hauptbahnhof
Platz : 2
HF : #
Abfahrt in : 28

:autsch:
 
Zuletzt bearbeitet von einem Moderator:

Tino124

Mitglied
Es Klappt! Musste nochmal ein neues Projekt anlegen, mein Eclipse hat scheinbar rumgesponnen.

Vielen vielen Dank eRaaaa ! An dem Problem hing ich schon Wochen :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
M Website Quelltext mit Java einlesen Allgemeine Java-Themen 10
L Datein einlesen. Allgemeine Java-Themen 5
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
F Datei in String-Array einlesen Allgemeine Java-Themen 8
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
Henrithebegiinerofjava Erste Schritte Werte in Eingabefelder einlesen und wiederholen lassen. Allgemeine Java-Themen 3
R .txt Datei einlesen und auf der Konsole ausgeben lassen Allgemeine Java-Themen 11
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
J Input/Output Word Datei einlesen, verarbeiten und abspeichern Allgemeine Java-Themen 3
K RTF-Dokumente einlesen Allgemeine Java-Themen 1
E Compiler-Fehler Unicode Zeichen einlesen Allgemeine Java-Themen 1
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
J Java 8 Datei einlesen Allgemeine Java-Themen 1
S Handschrift einlesen & darauf reagieren OCR Allgemeine Java-Themen 2
K Input/Output String aus einer Datei einlesen und in anderer Datei speichern Allgemeine Java-Themen 20
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
R Datei einlesen mit Win7 Allgemeine Java-Themen 8
E Best Practice LaTeX aus Textdateien einlesen und bearbeiten Allgemeine Java-Themen 4
KaffeeFan Bilddatei einlesen und bearbeiten? Allgemeine Java-Themen 5
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
T Geschlossen: Apache POI - Excel einlesen Allgemeine Java-Themen 0
J BufferedReader Datei einlesen Allgemeine Java-Themen 8
L Level einlesen Allgemeine Java-Themen 9
J Jar Datei mit anderer .jar einlesen Allgemeine Java-Themen 4
J Best Practice Java 8 Datei einlesen und verarbeiten Allgemeine Java-Themen 2
M Exceltabelle in Java erstellen und Werte einlesen Allgemeine Java-Themen 32
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
D Wörter aus Datei einlesen Allgemeine Java-Themen 9
D Input/Output Zeilen werden "ignoriert" beim Einlesen aus einer Textdatei Allgemeine Java-Themen 3
Ananaskirsche Input/Output Zeile aus Datei einlesen Allgemeine Java-Themen 10
N Einlesen einer Kostenmatrix, Verarbeitung mit Nearest Neighbor Allgemeine Java-Themen 1
OnDemand String aus html einlesen Allgemeine Java-Themen 2
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
P Input/Output Datei einlesen per Scanner(f) - mit Cron gehts nicht Allgemeine Java-Themen 1
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
AssELAss XML Datei einlesen und anschließen formatiert ausgeben in Datei Allgemeine Java-Themen 0
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
L Input/Output Datei einlesen und Inhalt in Array schreiben Allgemeine Java-Themen 3
MiMa Umlaute beim Einlesen von Dateinamen Allgemeine Java-Themen 12
C Verzeichnis ins JMenu einlesen Allgemeine Java-Themen 2
M Parameter-Datei einlesen (zeilenweise); Dateiintegrität Allgemeine Java-Themen 7
J TextArea einlesen, mit string Allgemeine Java-Themen 2
I Input/Output .csv Datei einlesen Allgemeine Java-Themen 4
Kenan89 Schnelleres Einlesen von Images Allgemeine Java-Themen 6
A TXT File einlesen unterschiedliche Zeilenlänge Allgemeine Java-Themen 9
A Input/Output Bild in Java einlesen und analysieren! Allgemeine Java-Themen 8
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
R String einlesen Allgemeine Java-Themen 8
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
K XML Quelltext Website einlesen?! Allgemeine Java-Themen 3
M File einlesen während es beschrieben wird.. Allgemeine Java-Themen 6
S Spaltenweise einlesen Allgemeine Java-Themen 9
K JAVA Datei einlesen Allgemeine Java-Themen 2
S Input/Output Latin-9 (ISO 8859-15) Textdatei einlesen Allgemeine Java-Themen 2
M Erste Schritte alle xmlFiles in zugehörige pdfFiles einlesen Allgemeine Java-Themen 4
M Eclipse Stackoverflow beim Einlesen von großen Bilder in kd Baum Allgemeine Java-Themen 15
C Strings in Excel einlesen! Allgemeine Java-Themen 2
K htmlCode einlesen, Speicherüberlauf? zu viel code? Allgemeine Java-Themen 21
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
K CSV einlesen und speichern Allgemeine Java-Themen 7
Q Text Datei einlesen Allgemeine Java-Themen 27
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M PDF einlesen mit PDFBox Allgemeine Java-Themen 3
L Benutzereingabe einlesen Allgemeine Java-Themen 5
M Einlesen einer Datei in Java Allgemeine Java-Themen 3
D class Datei einlesen Allgemeine Java-Themen 4
B StringBuilder von File einlesen Allgemeine Java-Themen 8
N Probleme mit Umlauten beim Einlesen Allgemeine Java-Themen 6
M Txt einlesen & Objekte erzeugen Allgemeine Java-Themen 2
E Leerzeichen verschwinden beim Einlesen von .txt-Dateien Allgemeine Java-Themen 5
A JExcel Formel einlesen Allgemeine Java-Themen 2
G Java PDF-Einlesen Allgemeine Java-Themen 9
H excel einlesen und in db schreiben Allgemeine Java-Themen 2
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
C Datei als ASCII text einlesen ? Allgemeine Java-Themen 16
M UTF-8 Datein einlesen, Zeichenproblem Allgemeine Java-Themen 9
H Textdatei (1GB) einlesen und verarbeiten Allgemeine Java-Themen 15
D Shortcut statt Datei einlesen Allgemeine Java-Themen 2
E HTML File mit Umlaute einlesen Allgemeine Java-Themen 8
J Konfigurationsdatei einlesen Allgemeine Java-Themen 21
G BigInteger aus DB nach einlesen in JAVA eingeklammert Allgemeine Java-Themen 3
trash mehrzeilige .txt einlesen/formatieren Allgemeine Java-Themen 8
B Applet .java Datei einlesen, anzeigen Allgemeine Java-Themen 3
S Textzeile einlesen Allgemeine Java-Themen 4
S Daten in Array als INT-Wert einlesen - jetzt als csv Datei Allgemeine Java-Themen 5
J Große Datei einlesen und gestückelt verarbeiten Allgemeine Java-Themen 4
W xml File einlesen und in eine andere xml File einfügen.. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben