XML schreiben - lesen

Andi_CH

Top Contributor
JA ich weiss - DOM, SAX ... aber der Unterschied ist mir nicht klar, aber die eigentliche Frage.

Gibt es irgendwo oder hat irgendwer ein KSKB in dem eine Datei geschrieben und wieder gelesen wird?
Ich habe bis jetzt nur Codeschnipsel gefundne, die ich nicht so richtig zusammenbauen kann.

Der Grund: (vielleicht haltet ihr XML nicht für den richtigen Ansatz, auch wenn ich das mal üben möchte)

Ich möchte userspezifische Einstellungen speichern und lesen.
Ein Eintrag besteht aus einen Keyword und 1 - mehreren Werten (abhängig vom Keyword)

z.B.
debug false
cam IP-Cam1 192.168.1.43 0 urlpat1
cam IP-Cam2 192.168.1.45 0 urlpat1

Wobei es (z.B. bei Windowspfadangaben) auch vorkommen kann, dass ' ' drin sind, aber genau das ist ja bei xml das kleinere Problem als bei Textdateien

Die Dateien sind klein (ich schätze mal ~10 Einträge)
Das zeitliche Verhalten ist unkritisch (wenns in <1 Sekunde fertig ist ... :D )
 
B

bygones

Gast
ganz ehrlich - deine Ambitionen in allen Ehren, aber XML ist einfach ein besch*** sache in Java. Es ist ein horrender Aufwand der im gegensatz zu kleinen files wie du sie hast meiner Ansicht nach in keiner Relation steht.

Die APIs, seien es DOM oder SAX sind meiner Ansicht nach unhandlich und voller boilerplate code.

daher find ich es irgendwie ironisch von einem KSKB zu sprechen...

naja - gibt bestimmt den einen oder anderen hier, der andere Meinung ist und dann auch etwas Code posten wird.

Mein Rat - such dir ein anderes Format - JSON, YAML oder was auch immer
 
M

Marcinek

Gast
JA ich weiss - DOM, SAX ... aber der Unterschied ist mir nicht klar, aber die eigentliche Frage.

Gibt es irgendwo oder hat irgendwer ein KSKB in dem eine Datei geschrieben und wieder gelesen wird?
Ich habe bis jetzt nur Codeschnipsel gefundne, die ich nicht so richtig zusammenbauen kann.

Andy ich denke du hast genügend Erfahrung um so ein Codeschnipsel zu finden oder? - Jeder liest XML Dateien.

Zeig mal so ein Codeschnipsel und dann kann mir dir helfen das zu verstehen.

---

Der Unterschied SAX und DOM ist, dass du bei DOM die GANZE Datei in den Speicher liest und dann darauf arbeitest, und bei SAX beim lesen diese bearbeitest ;)

---

Die Dateien sind klein (ich schätze mal ~10 Einträge)
Das zeitliche Verhalten ist unkritisch (wenns in <1 Sekunde fertig ist ... )
[

Schau dir mal XStram an aber das ist für deine Anforderung schon oversized.
Eventuell mal XML Propertie Reader suchen?
 
M

maki

Gast
ganz ehrlich - deine Ambitionen in allen Ehren, aber XML ist einfach ein besch*** sache in Java. Es ist ein horrender Aufwand der im gegensatz zu kleinen files wie du sie hast meiner Ansicht nach in keiner Relation steht.
Hehehe... so schreibt nur jemand der XML Dateien in Groovy gelesen/geschrieben hat :D
Danach kommt einem die XML Verarbeitung in Java erst recht umständlich vor.
 
B

bygones

Gast
Hehehe... so schreibt nur jemand der XML Dateien in Groovy gelesen/geschrieben hat :D
Danach kommt einem die XML Verarbeitung in Java erst recht umständlich vor.
mhm richtig - vorher kaeme man nicht auf die Idee dass sowas
Java:
public class StaxWriter {
	private String configFile;

	public void setFile(String configFile) {
		this.configFile = configFile;
	}

	public void saveConfig() throws Exception {
		// Create a XMLOutputFactory
		XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
		// Create XMLEventWriter
		XMLEventWriter eventWriter = outputFactory
				.createXMLEventWriter(new FileOutputStream(configFile));
		// Create a EventFactory
		XMLEventFactory eventFactory = XMLEventFactory.newInstance();
		XMLEvent end = eventFactory.createDTD("\n");
		// Create and write Start Tag
		StartDocument startDocument = eventFactory.createStartDocument();
		eventWriter.add(startDocument);

		// Create config open tag
		StartElement configStartElement = eventFactory.createStartElement("",
				"", "config");
		eventWriter.add(configStartElement);
		eventWriter.add(end);
		// Write the different nodes
		createNode(eventWriter, "mode", "1");
		createNode(eventWriter, "unit", "901");
		createNode(eventWriter, "current", "0");
		createNode(eventWriter, "interactive", "0");

		eventWriter.add(eventFactory.createEndElement("", "", "config"));
		eventWriter.add(end);
		eventWriter.add(eventFactory.createEndDocument());
		eventWriter.close();
	}

	private void createNode(XMLEventWriter eventWriter, String name,
			String value) throws XMLStreamException {

		XMLEventFactory eventFactory = XMLEventFactory.newInstance();
		XMLEvent end = eventFactory.createDTD("\n");
		XMLEvent tab = eventFactory.createDTD("\t");
		// Create Start node
		StartElement sElement = eventFactory.createStartElement("", "", name);
		eventWriter.add(tab);
		eventWriter.add(sElement);
		// Create Content
		Characters characters = eventFactory.createCharacters(value);
		eventWriter.add(characters);
		// Create End node
		EndElement eElement = eventFactory.createEndElement("", "", name);
		eventWriter.add(eElement);
		eventWriter.add(end);

	}
}
intuitiv ist, um
Code:
<?xml version="1.0" encoding="UTF-8"?>
<config>
	<mode>1</mode>
	<unit>900</unit>
	<current>1</current>
	<interactive>1</interactive>
</config>
zu schreiben.... (geklaut von Java and XML - Tutorial).

Es mag besseren code geben bzw neue libs.
 
S

SlaterB

Gast
> bzw neue libs.
wie bei Checked Exceptions und anderen Dingen verstehe ich nicht die so fundamentalen Probleme mit Standard-Interfacen,
das kann man doch alles in Basisklassen verstecken und dann von
Java:
main {
  XML.write(zeile1,zeile2,zeile3); // Strings
}
bis zu
Java:
main {
  XMLBuilder.xmlStart("1.0").openTag("config").entry("mode","1"). ..
}
beliebiges selber bauen

----

der wesentliche Bestandteil des geposteten Codes,
Java:
        createNode(eventWriter, "mode", "1");
        createNode(eventWriter, "unit", "901");
        createNode(eventWriter, "current", "0");
        createNode(eventWriter, "interactive", "0");
kommt dem ja auch schon nahe, das meiste drumherum ist nur Blahblah, kann man verstecken,
aber man hat eben die Möglichkeit, Konfigurationen anzugeben
 
M

maki

Gast
@bygones
Fieser Trick hier StAX als Beispiel zu nehmen ;)
IMHO ist JDom einfache als StAX, kommt aber trotzdem nicht an Groovy ran.
 

Andi_CH

Top Contributor
Den geposteten Code werde ich jetzt mal anschauen - dank dem Keyword-Tipp gefunden:
(Also wenn das kein KSKB ist ;-) )

Wie handle ich das, dass es mehrere Cams geben kann? Anzahl nicht bekannt.

www.kodejava.org/examples/267.html und www.kodejava.org/examples/267.html

Java:
import java.io.File;
import java.io.FileOutputStream;
import java.util.Properties;

public class PropertiesToXml {

	private final static String filename = "configuration.xml";

	public static void main(String[] args) throws Exception {
		Properties properties = new Properties();
		properties.setProperty("database.type", "mysql");
		properties.setProperty("database.url", "jdbc:mysql://localhost/mydb");
		properties.setProperty("database.username", "root");
		properties.setProperty("database.password", "root");
		properties.setProperty("data.folder", "data/folder");
		properties.setProperty("jdbc.url", "jdbcUrl");
		properties.setProperty("oben", "test");
		FileOutputStream fos = new FileOutputStream(filename);
		properties.storeToXML(fos, "test_configuration", "UTF-8");
		File f = new File(filename);
		System.out.println(f.getAbsolutePath());
		System.out.println(f.getCanonicalPath());
	}
}

Java:
import java.io.FileInputStream;
import java.util.Properties;

public class LoadXmlProperties {
	
	private final static String filename = "configuration";

	public static void main(String[] args) {
		LoadXmlProperties lxp = new LoadXmlProperties();
		try {
			Properties properties = lxp.readProperties();
			/*
			 * Display all properties information
			 */
			properties.list(System.out);

			/*
			 * Read the value of data.folder and jdbc.url configuration
			 */
			System.out.println(properties.getProperty("database.type"));
			System.out.println("data.Folder = " + properties.getProperty("data.folder"));
			System.out.println("url.jdbcUrl = " + properties.getProperty("jdbc.url"));
			System.out.println("oben        = " + properties.getProperty("oben"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
Zuletzt bearbeitet:
B

bygones

Gast
@bygones
Fieser Trick hier StAX als Beispiel zu nehmen ;)
IMHO ist JDom einfache als StAX, kommt aber trotzdem nicht an Groovy ran.
hehe - ertappt ;-)

@Slater
klar kann man selber aus den ganzen wirren libs da draussen seine eigene sauberer erstellen - aber warum muss ich mich auch noch darum kuemmern den Dreck von anderen aufzuraeumen. Mag jemand anders sein natuerlich. Aber ich bleibe dabei, was man unter dem Deckmantel von XML in Java so geschaffen hat, da grauts einem... API design mal komplett ignoriert etc.
 
S

SlaterB

Gast
vielleicht habe ich einfach nur noch keine guten APIs gesehen bzw. habe immer eigene abweichende Vorstellungen,
egal ob FileStreams, komplexe GUI-Layouts, JFreeChart, Calendar auf welches natürlich sowieso schon genug eingehauen wird,
alles gehört mit Hilfsklassen ausgestattet ;)
 
Zuletzt bearbeitet von einem Moderator:
B

bygones

Gast
ich werde jetzt nicht anfangen groovy bsp zu posten um zu zeigen, dass es freundliche apis gibt, das wuerde einfach zu einer unnuetzigen Diskussion fuehren.

Es spricht auch nix gegen kleine Hilfsklassen die eine API an seine Fragestellung adaptiert, aber die Frage ist wie simpel, einfach diese API zu nutzen und wie schwer sie miss zu verstehen.

Und XML apis sind nun mal das parate bsp (ua mit Calendar ;-) ) die furchtbar in die Hose gegangen sind. Wenn man mir nicht glaubt, so kann man sich einen Vortrag von J. Bloch anschauen (How To Design A Good API and Why it Matters - YouTube) anschauen - dort zeigt er u.a. diese Java Klassen bzw Apis (und andere weitere)
 

Andi_CH

Top Contributor
Kann ich in Properties wirklich keine Struktur bauen?
"Cam" und darunter eine Aufzählung die ich dann als iterierbare Datenstruktur abrufen kann?
 
B

bygones

Gast
Kann ich in Properties wirklich keine Struktur bauen?
"Cam" und darunter eine Aufzählung die ich dann als iterierbare Datenstruktur abrufen kann?
du kannst bei properties nur eine aufzaehlung anfuehren, die du selber dann ausliest - ala
Code:
key = value1,value2,value3
Java:
String values = property.getProperty("key");
String[] v = values.split(",");
aber die Ausdrucksfaehigkeit von Properties ist enorm eingeschraenkt - dafuer eben wie Slater sagt, enorm leichter Zugriff
 

Andi_CH

Top Contributor
Das da finde ich gar nicht so schlecht.

Anstelle von Proberties selbst parsen - warum nicht. Die 3 "Dates" werden einfach meine Cams ;-)

Danke für euren Einsatz!

Das Schreiben eines entsprechenden XML-Files bin ich noch am üben ;-)
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Ob's schon jemandem aufgefallen ist, dass XML eigentlich schon eine eigene Sprache ist? Ich denke mal ja. Zwar keine Programmiersprache aber zumindest eine, mit der man Dokument-Typen (ähnlich SGML, hätt' ich fast gesagt :lol:) beschreiben kann. Nun stellt sich eigentlich nur die Frage, will man XML-Dateien eines speziellen (z.B. ODF-Dateiformat oder ähnliches), eines eigenen oder gar eines unbestimmten Typs lesen bzw. schreiben? Trivial ist logischerweise nichts bzw. nur sehr wenig davon.
 
M

maki

Gast
@Sapcerat
XML ist nunmal eine Sprache um Sprachen zu definieren, u.a. auch "Programmiersprachen" bzw. DSLs, siehe Ant "Scripte".
 
S

Spacerat

Gast
[OT]@maki: Sicher nur Sprachen? Sicher nicht... Die Extensible Markuplanguage, welche aus der Standard Generalized Markup Language hervorgeht, kann definitiv mehr als nur Build-Abläufe für andere Sprachen strukturieren. Sieh' dir z.B. nur mal das Open Document Format an. XML findet man heute überall... HTML4+, C4DXML und was weis ich noch wo.[/OT]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
A JSON Lesen und Schreiben. Java Basics - Anfänger-Themen 3
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
Z Problem beim Lesen und Schreiben einer Datei Java Basics - Anfänger-Themen 10
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
E txt Datei schreiben und lesen Java Basics - Anfänger-Themen 9
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
S Lesen und Schreiben von Dateien in Java Java Basics - Anfänger-Themen 11
F Unicode beim Lesen und Schreiben per java.io.* Java Basics - Anfänger-Themen 9
A Datei Lesen und Schreiben in gleichen Klasse Java Basics - Anfänger-Themen 3
S Array Daten in Binär Datei schreiben/lesen Java Basics - Anfänger-Themen 11
J Problem mit Datei lesen und schreiben Java Basics - Anfänger-Themen 8
M Datei Lesen Und Schreiben! -.- Java Basics - Anfänger-Themen 7
C Ist gleichzeitiges Lesen und Schreiben einer ArrayList möglich Java Basics - Anfänger-Themen 2
R Daten aus Datenbank lesen, verarbeiten und schreiben. Java Basics - Anfänger-Themen 1
R Sequentielle Datei lesen und schreiben Java Basics - Anfänger-Themen 5
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
mwildam Textfile lesen und schreiben - so viele Möglichkeiten Java Basics - Anfänger-Themen 5
C lesen und schreiben Java Basics - Anfänger-Themen 24
M Textboxen lesen und schreiben! Java Basics - Anfänger-Themen 3
M Dateien lesen/schreiben und Heap Space Probleme Java Basics - Anfänger-Themen 8
T gezieltes lesen/schreiben in datei Java Basics - Anfänger-Themen 9
M lesen und schreiben aus Programm Java Basics - Anfänger-Themen 6
H Datei lesen und an bestimmter Stelle schreiben Java Basics - Anfänger-Themen 4
I Bits lesen und schreiben Java Basics - Anfänger-Themen 6
J Datei-Details /-Infos wie Kommentare, Autor lesen/schreiben Java Basics - Anfänger-Themen 2
B Datei lesen und schreiben Java Basics - Anfänger-Themen 2
R Datei erzeugen schreiben und lesen ? Java Basics - Anfänger-Themen 18
S Textdatei lesen und schreiben Java Basics - Anfänger-Themen 2
N Mehrzeilig aus Datein lesen und schreiben Java Basics - Anfänger-Themen 8
M Linked List schreiben und lesen Java Basics - Anfänger-Themen 4
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
java-starter Erste Schritte Mit While Schleifen Programme schreiben Java Basics - Anfänger-Themen 4
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
D JAVA Programm schreiben Java Basics - Anfänger-Themen 46
S In Datei schreiben in Java? Java Basics - Anfänger-Themen 1
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
S Bot schreiben Java Basics - Anfänger-Themen 1
J Kann ich mein Programm so schreiben? Java Basics - Anfänger-Themen 4
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
C Brauche Hilfe um ein Programm zu schreiben Java Basics - Anfänger-Themen 8
C XML Datei schreiben Java Basics - Anfänger-Themen 14
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
B Inputstream in file schreiben? Java Basics - Anfänger-Themen 23
L Test-Methoden schreiben Java Basics - Anfänger-Themen 13
L x und y Koordinaten in ein Array schreiben Java Basics - Anfänger-Themen 7
J Programm schreiben Java Basics - Anfänger-Themen 5
G In Datei schreiben Java Basics - Anfänger-Themen 1
B Werte aus einem Unterprogramm in ein Array schreiben Java Basics - Anfänger-Themen 2
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
J Methode selber schreiben Java Basics - Anfänger-Themen 5
M Plateau Prgramm schreiben Java Basics - Anfänger-Themen 2
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
J String in Datei schreiben Java Basics - Anfänger-Themen 4
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
H projekt 1 code schöner schreiben. Java Basics - Anfänger-Themen 25
O findRoot Methode schreiben in einem Intervall Java Basics - Anfänger-Themen 31
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
X Arrays untereinander schreiben Java Basics - Anfänger-Themen 4
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
L Input/Output Konsole in Farben schreiben Java Basics - Anfänger-Themen 4
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
Y kann jemand die Terme mit Zahlen schreiben ?? Java Basics - Anfänger-Themen 4
L Input/Output In Farben schreiben Java Basics - Anfänger-Themen 3
x-tshainge In gespeicherter Datei schreiben? Java Basics - Anfänger-Themen 7
F Schreibprogramm nur markierten Text in kursiv oder fett schreiben Java Basics - Anfänger-Themen 3
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
karlmasutra Ausgabe in ein Array schreiben Java Basics - Anfänger-Themen 14
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
J Mit JSF Formular in Datenbank schreiben Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
R Input/Output Dateinamen aus Verzeichnis in Datei schreiben Java Basics - Anfänger-Themen 3
E Wert in Textfeld schreiben Java Basics - Anfänger-Themen 1
P Erste Schritte Schreiben in eine Datei Java Basics - Anfänger-Themen 9
M Java Roboter schreiben mit Eclipse Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
M Rekursion schreiben Java Basics - Anfänger-Themen 16
M In einer Datei schreiben - Java Java Basics - Anfänger-Themen 3
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben