XML Datei über Java Swing ausgeben

Saarlodri

Grünschnabel
Hallo Allerseits!

Ich will ein Programm schreiben das mir eine XML Datei in einem Fenster (mit Java Swing) darstellt. Dabei soll aber nicht der XML Code an sich, sondern nur der Inhalt einfach formatiert, dargestellt werden.

Das formatieren an sich stellt, denke ich, kein Problem dar. Ich müsste nur wissen wie ich die XML Datei einlesen & dann verarbeiten kann.

Könnt ihr mir bitte ein paar Tips geben wie ich das am schlausten realisieren kann?

Liebe Grüße
 
Tach,
such mal hier oder im übergeordneten Brett nach XML und (J)DOM, dürfte noch nicht so lange her sein das Thema. Und ein Blick in die Tutorials schadet manchmal auch nicht. *wink-mit-zaunpfahl*
Wenn Du nichts findest (wehe!) oder nicht schlau daraus wirst dann sag an, ich habe hier eine Beispielanwendung parat.
 
Hallo!

Dabei soll aber nicht der XML Code an sich, sondern nur der Inhalt einfach formatiert, dargestellt werden

Du willst also das gerenderte Dokument (das du beispielswiese über XSLT erhälst). Nehmen wir mal an, dass gerenderte XML-Dokument wäre eine HTML Seite dann würde ich dir denn JTextPane empfehlen:

Code:
import java.awt.Dimension;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;

public class JEditorExample extends JFrame {

	private JTextPane textPane;
	private JScrollPane scrollPane;

	public JEditorExample() {
		super("JEditorExample");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		scrollPane = new JScrollPane();

		textPane = new JTextPane();
		textPane.setEditable(false);

		try {
			textPane.setPage(new File("C:/xmlTest/Test.html").toURL());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		textPane.setPreferredSize(new Dimension(320, 240));
		
		scrollPane.getViewport().add(textPane);
		
		getContentPane().add(scrollPane);
		
		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		new JEditorExample();
	}
}

Damit kannst du ganz einfach eine HTML Seite anzeigen lassen.

Gruß Tom
 
Original geschrieben von Snape
Tach,
such mal hier oder im übergeordneten Brett nach XML und (J)DOM, dürfte noch nicht so lange her sein das Thema. Und ein Blick in die Tutorials schadet manchmal auch nicht. *wink-mit-zaunpfahl*
Wenn Du nichts findest (wehe!) oder nicht schlau daraus wirst dann sag an, ich habe hier eine Beispielanwendung parat.

Hab mir das alles schon durchgelesen, aber das hilft mir nicht wirklich weiter :(
In Java-Programmierung bin ich recht fit, aber in Sachen einlesen von XML-Dateien & Java Swing hab ich noch net viel Erfahrung...
Kann ich Dein Progg mal sehn?


@Thomas: Ja so in die Richtung soll es gehen, nur müsste das ganze mit ner .xml datei sein, die liegt irgendwo im Netz auf nem Server & ich kann halt nur die Url nutzen...


Danke schonmal ihr Zwei für Eure Hilfe!
gruß saar
 
Zuletzt bearbeitet:
Hallo!

Ich verwende in meinem Beispiel ja auch eine URL:

Code:
textPane.setPage(new File("C:/xmlTest/Test.html").toURL());
müsstest du nur umändern in:
textPane.setPage(new URL("http://www.tutorials.de/index.html"));

Aber mach doch einfach folgendes:

1) Lade das XML Dokument vom Server.
2) Transformiere das ganze mit einem XSLT Processor nach HTML (oder was auch immer, JTextPane so alles anzeigen kann)
3) Speicher den Output (z.Bsp. HTML) in eine Datei lokal ab und lade die Datei wie gezeigt in den JTextPane. (Du könntest auch ein neues StyledDocument im Speicher bauen und das dan dem JTextPane übergeben, so bräuchtest du noch nicht einmal Schreibzugriff auf der Festplatte)
4) Fertig. ;-)

Gruß Tom
 
In der Theorie hab ich an so was ähnliches auch gedacht,
nur an der Umsetzung hapert's da ich wie scho gesacht net wirklich fit in sachen xml bin und alles was dazu gehört *ggg*

Nehmen wir mal an das sei ein Ausschnitt aus der xml datei (keine angst, is aus ner übung, bin keine Lebensmittelguru ^^):

---
<produkt vorhanden="true">
<typ>Lebensmittel</typ>
<preis waehrung="EUR">00.69</preis>
<artnr>55-023187</artnr>
<bezeichnung>Snickers Schokoriegel</bezeichnung>
<lieferant>Snickers GmbH</lieferant>
<menge einheit="stueck">1</menge>
</produkt>
...


Ist es nicht irgendwie ganz einfach möglich, jetzt irgendwie unter der Verwendung von Java Swish nur folgendes in meinem Fenster angezeigt zu bekommen:


Typ: Lebensmittel
Preis: 00.69 €
ArtNr: 55-023181

etc.?

gruß saar
 
Vielleicht hilft Dir ja das:

Code:
	/**
	 * XML Parsen
	 *
	 */
	private final void readXMLWithSubAndAttributes()
	{
		SAXBuilder sxbuild = new SAXBuilder();
		InputSource is = new InputSource("D:\\eclipse\\workspace\\Tests\\src\\TableTest\\adressen_sub_attr.xml");
		try
		{		
			Document doc = sxbuild.build(is);
			Element root = doc.getRootElement();
			
			List list = root.getChildren("adresse");
			Iterator iterator = list.iterator();

			while(iterator.hasNext())
			{
				
				Element element = (Element)iterator.next();
				
				String sName 					= element.getChild("name").getAttributeValue("nachname");
				String sVorname  			= element.getChild("name").getAttributeValue("vorname");
				String sStrasse 			= element.getChild("strasse").getText();
				String sHausnummer 		= element.getChild("hausnummer").getText();
				String sPostleitzahl 	= element.getChild("postleitzahl").getText();
				String sWohnort				= element.getChild("wohnort").getText();

                                // Das hier ist meine Weiterverarbeitung; Du kannst mit den oben ausgelesenen Daten natürlich selbst machen, was Du möchtest
				TableTestRow row = new TableTestRow(sName,
			         sVorname,
			 	 sStrasse,
				 sHausnummer,
				 sPostleitzahl,
				 sWohnort);				
				tableTestTableModel.addRow( row );
			   
			}
		}
		catch(Exception e){}
	}

Und so sieht die XML-Datei aus:

Code:
<?xml version="1.0"?>

<adresses>
   <adresse>
      <name
        nachname="Mustermann"
        vorname="Hans"
      />
      <strasse>Musterstrasse</strasse>
      <hausnummer>471</hausnummer>
      <postleitzahl>12345</postleitzahl>
      <wohnort>Berlin</wohnort>
   </adresse>
   <adresse>
      <name
        nachname="Mustermann"
        vorname="Kurt"
      />
      <strasse>Kaiserstrasse</strasse>
      <hausnummer>4</hausnummer>
      <postleitzahl>98765</postleitzahl>
      <wohnort>Kleinkleckersdorf</wohnort>
   </adresse>
   <adresse>
      <name
        nachname="Tunichtgut"
        vorname="Elfriede"
      />
      <strasse>Bahnhofstrasse</strasse>
      <hausnummer>1</hausnummer>
      <postleitzahl>55555</postleitzahl>
      <wohnort>Hogsmeade</wohnort>
   </adresse>
   <adresse>
      <name
        nachname="Dumbledore"
        vorname="Albus"
      />
      <strasse>Hexenstrasse</strasse>
      <hausnummer>666</hausnummer>
      <postleitzahl>66666</postleitzahl>
      <wohnort>Hogwarts</wohnort>
   </adresse>
</adresses>
 
@Snape: Danke für das Proggi ich glaube das hilft mir weiter!

@Thomas: Alles klar, da schau ich mal vorbei!

Nochmal thx & drückt mir die Daumen ^^
 
Zurück