# Xml oder Json?



## MrKavatch (10. Apr 2016)

Hallo,
Ich wollte mich mal informieren was ihr für besser empfindet für Infos zu speichern.
Da ich das jetzt auch mal benutzen wollte / erlernen will wollte ich euch hier vorher Fragen was ich den eben benutzen soll (Was die meisten möglichkeiten hat oder was halt einfacher ist usw)

Vielen danke für alle Hilfe 
Mfg
MrKavatch


----------



## mrBrown (10. Apr 2016)

Unterschiedlich...

Für Konfigurationsdateien meistens eher XML (bzw. wenn möglich lieber einfache properties mit key=value), für alle sonstige Daten JSON. Finde ich persönlich leichter mit zu arbeiten und lesbarer.

Umgehen können sollte man aber mit beidem


----------



## MrKavatch (10. Apr 2016)

mrBrown hat gesagt.:


> Unterschiedlich...
> 
> Für Konfigurationsdateien meistens eher XML (bzw. wenn möglich lieber einfache properties mit key=value), für alle sonstige Daten JSON. Finde ich persönlich leichter mit zu arbeiten und lesbarer.
> 
> Umgehen können sollte man aber mit beidem


Viel Dank für die Antwort.
Dürfe ich dich eventuell noch Fragen wo und wie ich am besten Json bzw Xml erlernen kann?


----------



## Saheeda (10. Apr 2016)

Arbeite damit.
JSON und XML sind beides ziemlich einfache Sprachen, die man sehr schnell lesen und schreiben lernt.
Das schwierigste daran find ich ist, sich in einen entsprechenden Parser einzulesen, welcher die Daten umwandelt (für JSON nehme ich z.B. gern Gson).
Bei beiden Sprachen ist keine "Magic" dahinter, es ist einfach nur eine strukturierte Darstellung von Daten.

Überleg dir ein paar einfache Beispiele, und setze sie damit um.

Zur Syntax:
http://www.w3schools.com/xml/
http://www.w3schools.com/json/

Ich selbst arbeite wesentlich häufiger mit JSON, als mit XML, was aber auch daran liegt, dass ich selten Konfigurationen vornehmen muss. Dafür arbeite ich viel an Webanwendungen, die eben über JSON Daten versenden bzw. sie im JSON-Format erwarten.


----------



## Baldur (11. Apr 2016)

Falls deine Dateien nicht maschinell geschrieben werden, sondern von Menschen editiert werden sollen wäre ein Argument für XML, daß man dort auch recht einfach eine Validierung mittels DTD-Dateien einbauen kann.
Die DTD enthält recht einfache Regeln (z.b. daß das Tag "Person" immer ein Attribut "Name" enthalten muss oder optional ein Tag "Addresse" enthalten kann usw). IDEs wie NetBeans oder IntelliJ können dann auf Basis der DTD dein XML validieren und bieten sogar Codevervollständigung an.



mrBrown hat gesagt.:


> Für Konfigurationsdateien meistens eher XML (bzw. wenn möglich lieber einfache properties mit key=value)


Das mit den Properties würde ich auch so unterstreichen. Reicht für Konfigurationsdateien meistens völlig aus und man kann wesentlich einfacher mit umgehen als wie mit XML oder JSON.


----------



## MrKavatch (11. Apr 2016)

Danke für alle antworten. Ich habe nun mit Xml angefangen aber habe dabei noch eine kurze Frage. Wie kann ich einzelnen daten abrufen. Also beispiel:

```
<shop>
  <artikel>
    <name>Artikel 1</name>
    <preis> 12.00</preis>
    <lageranzahl>45</lageranzahl>
  </artikel>
  <artikel>
    <name>Artikel 2</name>
    <preis> 54.00</preis>
    <lageranzahl>8</lageranzahl>
  </artikel>
  <artikel>
    <name>Artikel 3</name>
    <preis> 1.00</preis>
    <lageranzahl>434</lageranzahl>
  </artikel>
</shop>
```
Wie kann ich dabei jetzt Zb den Preis des 2 Artikels bekommen? (Und nichts anderes)
Mfg


----------



## Baldur (11. Apr 2016)

Ein fertiges Codebeispiel hab ich gerade nicht parat, daher einfach mal ein paar Stichworte, nach denen du googeln kannst 

*XML DOM Parser*: ist ein recht umfangreicher Parser, der dir das XML direkt in eine Datenstruktur einliest, die du dann über Schleifen, etc abarbeiten kannst.
*XML SAX Parser*: ist ein einfacherer Parser, der etwas umständlicher zu handhaben ist und keine Validierung bietet, dafür aber schneller und speichersparender ist
*XQuery*: Ist eine Art Abfragesprache um einzelne Daten aus einem XML-Dokument zu extrahieren. Also z.B. "gib mir den Namen des zweiten Artikels"
Wenn du wirklich nur einzelne Werte brauchst, kannst du es mit XQuery versuchen. Ansonsten nutz lieber den DOM Parser und lies das Dokument in eine eigene Datenstruktur ein (also so daß du z.B. am Ende eine `List<Artikel>` bekommst), die du dann einfacher abarbeiten kannst.


----------



## MrKavatch (11. Apr 2016)

Baldur hat gesagt.:


> Ein fertiges Codebeispiel hab ich gerade nicht parat, daher einfach mal ein paar Stichworte, nach denen du googeln kannst
> 
> *XML DOM Parser*: ist ein recht umfangreicher Parser, der dir das XML direkt in eine Datenstruktur einliest, die du dann über Schleifen, etc abarbeiten kannst.
> *XML SAX Parser*: ist ein einfacherer Parser, der etwas umständlicher zu handhaben ist und keine Validierung bietet, dafür aber schneller und speichersparender ist
> ...


Danke dafür, ich habe es auch schon versucht mit Sax aber ich verstehe das leider damit nicht so ganze:/
Aber noch eine sachen zu dem Beispiel davor. Ich habe noch eine anderes gefunden und bin mir nicht ganz sicher wofür man was benutzt.
Das beispiel:

```
<?xml version="1.0"?>
<party datum="31.12.01">
  <gast name="Albert Angsthase">
    <getraenk>Wein</getraenk>
    <getraenk>Bier</getraenk>
    <zustand ledig="true" nuechtern="false"/>
  </gast>
</party>
```
Muss ich sowas benutzen wenn ich einzelnen daten abrufen will oder kann ich auch bei dem vorherigen bleiben?


----------



## Baldur (11. Apr 2016)

Du meinst ob du lieber verschachtelte Elemente benutzt oder Elemente mit Attributen?
Beides hat seine Vorteile. Ein Element wie "getraenk" kannst du beliebig oft in deiner Struktur wiederholen. Für Attribute kannst du mittels DTD genauer festlegen, was erlaubt ist (z.B. daß "nuechtern" nur jeweils true oder false enthalten darf, oder ob es ein Pflichtattribut ist oder optional) Von daher solltest du das einfach von Fall zu Fall entscheiden, was du für geeigneter hältst.



MrKavatch hat gesagt.:


> Danke dafür, ich habe es auch schon versucht mit Sax aber ich verstehe das leider damit nicht so ganze:/


Probier mal den DOM Parser aus. Eventuell ist der für dich leichter zu verstehen, da er dir das Dokument schonmal in eine passende Struktur einliest. Da kannst du dann die einzelnen Elemente einfach per Schleifen durchlaufen.
Bei SAX musst du dich selbst um die Struktur kümmern, dafür ist er besser bei großen Dokumenten (groß im Sinne von 2-3-stelligen MB-Bereich)


----------



## Tobse (11. Apr 2016)

Hier noch mein Senf: ich arbeite auch lieber mit JSON als mit XML. Ich erachte es aber bei beiden für notwendig, das Format richtig anzugeben weil sonst schnell Fehler auftreten können. Für XML ist das ganz klar DTD, *für JSON gibt es so genannte JSON-Schemas *(siehe Beispiel).


----------



## MrKavatch (11. Apr 2016)

Tobse hat gesagt.:


> Hier noch mein Senf: ich arbeite auch lieber mit JSON als mit XML. Ich erachte es aber bei beiden für notwendig, das Format richtig anzugeben weil sonst schnell Fehler auftreten können. Für XML ist das ganz klar DTD, *für JSON gibt es so genannte JSON-Schemas *(siehe Beispiel).


Danke ^^
Ich werde es morgen einfach auch mal ausprobieren und mal schauen welches ich für mich besse finde bzw für meien verwendungszwecke besser geeignent sind.


----------



## klauskarambulut (12. Apr 2016)

Was für ein Quatsch von Vorgestern ist das mit DTD?
XML definiert man und das nicht erst seit gestern mit XML-Schema also XSD-Dateien.

Jeder halbwegs anständige XML-Editor kann dir aus dem gegebenen XML eine XSD-Datei generieren, die man dann eben noch leicht anpassen kann oder muss. Aber fast selbsterklärend.

Mit der XSD-Datei generiert man dann Java-Code. Bei einer Javainstallation ist da das tool xjc dabei.
Da kommt dann Klasse Shop mit einer List<Artikel> raus und eine Klasse Artikel mit Name, Preis, etc.

Und mit dem in Java enthaltenen javax.xml.bind.Unmarshaller sind es ein paar Aufrufe die aus einer XML-Datei dann eine Instanz von Shop erzeugt.

und den Preis des zweiten Artikels bekommt man dann über shop.getArtikels().get(1).getPreis(), also ganz normale Java-Objekte.

Das funktioniert und ist auch gut dokumentiert. Das ganze läuft auch unter dem Namen JaxB (Doku, Tutorials etc.).

Probleme treten hier auf, wenn sich im Lauf der Zeit das XML-Format ändert. Also weitere Felder hinzukommen oder entfallen. Wenn das ganze aber recht stabil ist oder gar auf anerkannten XML-Standards basiert, ist das in der Regel kein Problem.

Ansonsten kann "manuelles" Verarbeiten via Sax, Dom oder Json bei im Kern gleichbleibenden Dokumenten eine bessere, Fehlertolerantere Lösung bieten.

Mit Jaxb ist auch der Weg von Java-Objekten hin zu einer XML-Datei via Marshaller möglich.


----------



## dzim (13. Apr 2016)

Ich war früher absoluter XML-Fanboy. Heute finde ich die XSDs immer noch toll, aber leider sind die meisten Real-World-Anwendungen mit XML übertrieben kompliziert (ist ja eigentlich auch eher als M2M-Sprache gedacht, die zufällig noch lesbar sein kann), während man bei JSON meist immer noch auf vergleichbar einfache Strukturen setzt (was nicht heisst, dass sie schlecht sind). Und XML verursacht im Netzwerkbereich halt auch mehr Overhead, auch wenn das heutzutage wohl kaum noch ein K.O.-Kriterium sein wird.
Ich verwende heute zumeist JSON wegen der einfachen Lesbarkeit und weil Bibliotheken wie Jackson es einem recht einfach machen (für kleinere Datenmengen).
Am Ende aber: Ich kann mich nicht entscheiden. Ich find beides immer noch toll!


----------



## MrKavatch (13. Apr 2016)

klauskarambulut hat gesagt.:


> Was für ein Quatsch von Vorgestern ist das mit DTD?
> XML definiert man und das nicht erst seit gestern mit XML-Schema also XSD-Dateien.
> 
> Jeder halbwegs anständige XML-Editor kann dir aus dem gegebenen XML eine XSD-Datei generieren, die man dann eben noch leicht anpassen kann oder muss. Aber fast selbsterklärend.
> ...


Währe es eventuel möglich das du mir einen Link dazu gibt wo das alles nochmal eindeutig erklärt wird?
Bzw mir eine Code beispiel geben kannst?

Mfg


----------



## dzim (13. Apr 2016)

@MrKavatch meinst du so was hier? https://de.wikipedia.org/wiki/Java_Architecture_for_XML_Binding
Die Technologie ist schon so einige Jahre im JRE integriert, Tutorials u.w.s. gibt es im Netz zuhauf. Wenn man danach sucht.


----------



## MrKavatch (13. Apr 2016)

dzim hat gesagt.:


> @MrKavatch meinst du so was hier? https://de.wikipedia.org/wiki/Java_Architecture_for_XML_Binding
> Die Technologie ist schon so einige Jahre im JRE integriert, Tutorials u.w.s. gibt es im Netz zuhauf. Wenn man danach sucht.


Ja genau danke


----------

