CodeGym /Java-Blog /Random-DE /XML in Java
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

XML in Java

Veröffentlicht in der Gruppe Random-DE
Hallo! Heute stellen wir ein weiteres Datenformat namens XML vor. Das ist ein sehr wichtiges Thema. Wenn Sie an echten Java-Anwendungen arbeiten, werden Sie mit ziemlicher Sicherheit auf XML-bezogene Aufgaben stoßen. In der Java-Entwicklung wird dieses Format fast überall verwendet (wir werden weiter unten herausfinden, warum), daher empfehle ich Ihnen, diese Lektion nicht oberflächlich zu lesen, sondern sich ein gründliches Verständnis von allem anzueignen und auch zusätzliche Literatur/Links zu studieren :) Dies wird definitiv keine Zeitverschwendung sein. Beginnen wir also mit den einfachen Dingen: dem „Was“ und dem „Warum“!

Was ist Java XML?

XML steht für eXtensible Markup Language. Möglicherweise sind Sie bereits mit einer Auszeichnungssprache vertraut – haben Sie schon von HTML gehört, das zum Erstellen von Webseiten verwendet wird :) Was ist XML?  - 1HTML und XML sehen sogar ähnlich aus:
HTML 1

<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 1

<headline>title</headline>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
HTML 2

<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 2

<chief>title</chief>
<paragraph>paragraph<paragraph>
<paragraph>paragraph<paragraph>
Mit anderen Worten: XML ist eine Sprache zur Beschreibung von Daten.

Warum brauchen Sie XML?

XML wurde ursprünglich erfunden, um Daten bequemer zu speichern und zu versenden, auch über das Internet. Es bietet mehrere Vorteile, die Ihnen dabei helfen, dies zu erreichen. Erstens ist es sowohl für einen Menschen als auch für einen Computer leicht zu lesen. Ich denke, Sie können leicht verstehen, was diese XML-Datei beschreibt:

<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Auch ein Computer versteht dieses Format problemlos. Zweitens gibt es keine Kompatibilitätsprobleme, wenn wir sie von einem Computer auf einen anderen übertragen, da die Daten als Klartext gespeichert werden. Es ist wichtig zu verstehen, dass XML kein ausführbarer Code ist, sondern eine Datenbeschreibungssprache. Nachdem Sie Daten mithilfe von XML beschrieben haben, müssen Sie Code schreiben (z. B. in Java), der diese Daten senden/empfangen/verarbeiten kann.

Wie ist XML aufgebaut?

Die Hauptkomponente sind Tags: Dies sind die Dinge in spitzen Klammern:

<book>
</book>
Es gibt öffnende und schließende Tags. Das schließende Tag verfügt über ein zusätzliches Symbol („ / “), wie im Beispiel oben zu sehen ist. Jedes öffnende Tag muss ein schließendes Tag haben. Sie zeigen an, wo die Beschreibung jedes Elements in der Datei beginnt und endet. Tags können verschachtelt werden! In unserem Buchbeispiel verfügt das <book>-Tag über drei verschachtelte Tags: <title>, <author> und <year>. Dies ist nicht auf eine Verschachtelungsebene beschränkt: Verschachtelte Tags können ihre eigenen verschachtelten Tags usw. haben. Diese Struktur wird als Tag-Baum bezeichnet. Schauen wir uns diesen Baum anhand einer Beispiel-XML-Datei an, die ein Autohaus beschreibt:

<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Hier haben wir ein Top-Level-Tag: <carstore>. Es wird auch Wurzelelement genannt. <carstore> hat ein untergeordnetes Tag: <car>. <car> wiederum hat auch drei untergeordnete Tags: <model>, <year> und <price>. Jedes Tag kann Attribute haben, die zusätzliche wichtige Informationen enthalten. In unserem Beispiel hat das <model>-Tag ein „lang“-Attribut, das die Sprache angibt, in der der Modellname aufgezeichnet wird:

<model lang="en">Scania R 770</model>
Hier weisen wir darauf hin, dass der Name auf Englisch geschrieben ist. Unser <price>-Tag verfügt über das Attribut „Währung“.

<price currency="US dollar">150000.00</price>
Hier weisen wir darauf hin, dass der Preis des Autos in US-Dollar angegeben ist. Daher verfügt XML über eine „selbstbeschreibende“ Syntax. Sie können alle Informationen hinzufügen, die Sie zur Beschreibung der Daten benötigen. Darüber hinaus können Sie am Anfang der Datei eine Zeile hinzufügen, die die XML-Version und die zum Schreiben der Daten verwendete Codierung angibt. Dies wird als „Prolog“ bezeichnet und sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
Wir verwenden XML Version 1.0 und UTF-8-Kodierung. Dies ist nicht notwendig, kann aber nützlich sein, wenn Ihre Datei beispielsweise Text in verschiedenen Sprachen verwendet. Wir haben erwähnt, dass XML „eXtensible Markup Language“ bedeutet, aber was bedeutet „erweiterbar“? Dies bedeutet, dass es sich perfekt zum Erstellen neuer Versionen Ihrer Objekte und Dateien eignet. Angenommen, wir möchten in unserem Autohaus auch Motorräder verkaufen! Allerdings muss unser Programm beide Versionen von <carstore> unterstützen: die alte (ohne Motorräder) und die neue. Hier ist unsere alte Version:

<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Und hier ist die neue, erweiterte Version:

<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
So einfach und unkompliziert ist es, unserer Datei eine Beschreibung von Motorrädern hinzuzufügen :) Darüber hinaus brauchen wir auf keinen Fall die gleichen untergeordneten Tags für Motorräder wie für Autos. Bitte beachten Sie, dass Motorräder im Gegensatz zu Autos über ein <owner>-Element verfügen. Dies hindert den Computer (oder den Menschen) nicht daran, die Daten zu lesen.

Unterschiede zwischen XML und HTML

Wir haben bereits gesagt, dass XML und HTML optisch sehr ähnlich sind. Deshalb ist es sehr wichtig zu wissen, worin sie sich unterscheiden. Erstens werden sie für unterschiedliche Zwecke verwendet. HTML dient zum Markieren von Webseiten. Beim Erstellen einer Website können Sie beispielsweise mit HTML festlegen: „Das Menü sollte sich in der oberen rechten Ecke befinden. Es sollte die eine oder andere Schaltfläche haben.“ Mit anderen Worten: Die Aufgabe von HTML besteht darin, Daten anzuzeigen. XML dient zum Speichern und Senden von Informationen in einer für Menschen und Computer geeigneten Form. Dieses Format enthält keinen Hinweis darauf, wie diese Daten angezeigt werden sollen: Das hängt vom Code des Programms ab, das sie liest. Zweitens gibt es einen großen technischen Unterschied. HTML-Tags sind vordefiniert. Mit anderen Worten: Beim Erstellen eines HTML-Headers (z. B. einer großen Beschriftung oben auf der Seite) wird nur <h1></h1> verwendet Tags (<h2></h2> und <h3></h3> werden für kleinere Header verwendet). Sie können keine HTML-Header mit anderen Tags erstellen. XML verwendet keine vordefinierten Tags. Sie können den Tags einen beliebigen Namen geben: <header>, <title>, <idontknow2121>.

Konfliktlösung

Die Freiheit, die XML bietet, kann zu einigen Problemen führen. Beispielsweise kann ein und dieselbe Entität (z. B. ein Auto) von einem Programm für unterschiedliche Zwecke verwendet werden. Wir haben zum Beispiel eine XML-Datei, die Autos beschreibt. Allerdings haben sich unsere Programmierer vorher nicht darauf geeinigt. Und jetzt könnten wir in unserem XML zusätzlich zu Daten über echte Autos auch Daten über Spielzeugautos finden! Darüber hinaus haben sie die gleichen Eigenschaften. Nehmen wir an, unser Programm liest eine solche XML-Datei ein. Wie unterscheiden wir ein echtes Auto von einem Spielzeugauto?

<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
Hier helfen uns Präfixe und Namespace. Um in unserem Programm Spielzeugautos von echten zu unterscheiden (und tatsächlich alle Spielzeuge von ihren echten Gegenstücken), führen wir zwei Präfixe ein: „echt“ und „Spielzeug“.

<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
Jetzt kann unser Programm zwischen den verschiedenen Entitäten unterscheiden! Alles, was das Präfix „Spielzeug“ hat, wird als Spielzeug behandelt :) Allerdings sind wir noch nicht fertig. Um Präfixe verwenden zu können, müssen wir sie jeweils als Namespace registrieren. Eigentlich ist „Registrieren“ ein starkes Wort :) Wir müssen uns einfach für jeden von ihnen einen eindeutigen Namen ausdenken. Es ist wie bei Klassen: Eine Klasse hat einen Kurznamen ( Cat ) und einen vollständig qualifizierten Namen, der alle Pakete enthält ( zoo.animals.Cat). Ein URI wird normalerweise verwendet, um einen eindeutigen Namespace-Namen zu erstellen. Manchmal erfolgt dies über eine Internetadresse, in der die Funktionen dieses Namensraums beschrieben werden. Es muss aber keine gültige Internetadresse sein. Sehr oft verwenden Projekte einfach URI-ähnliche Zeichenfolgen, die dabei helfen, die Namespace-Hierarchie zu verfolgen. Hier ist ein Beispiel:

<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
Natürlich gibt es keine Website unter „http://testproject.developersgroup1.companyname/department2/namespaces/real“. Aber dieser String enthält nützliche Informationen: Die Entwickler von Gruppe 1 in Abteilung 2 sind für die Erstellung des „echten“ Namensraums verantwortlich . Wenn wir neue Namen einführen oder mögliche Konflikte besprechen müssen, wissen wir, an wen wir uns wenden können. Manchmal verwenden Entwickler eine echte beschreibende Webadresse als eindeutigen Namespace-Namen. Dies kann beispielsweise bei einem großen Unternehmen der Fall sein, dessen Projekt von Millionen Menschen auf der ganzen Welt genutzt wird. Aber das wird sicherlich nicht immer gemacht: Stack Overflow hat eine Diskussion zu diesem Thema. Im Allgemeinen gibt es keine strenge Anforderung, URIs als Namespace-Namen zu verwenden: Sie können auch einfach zufällige Zeichenfolgen verwenden. Diese Option würde auch funktionieren:

xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Allerdings hat die Verwendung eines URI mehrere Vorteile. Mehr dazu können Sie hier lesen .

Grundlegende XML-Standards

XML-Standards sind eine Reihe von Erweiterungen, die XML-Dateien zusätzliche Funktionalität hinzufügen. XML hat viele Standards, aber wir schauen uns nur die wichtigsten an und finden heraus, dass sie AJAX ermöglichen, einen der bekanntesten XML-Standards. Damit können Sie den Inhalt einer Webseite ändern, ohne sie neu laden zu müssen! Mit XSLT können Sie XML-Text in andere Formate konvertieren. Sie können beispielsweise XSLT verwenden, um XML in HTML zu konvertieren! Wie bereits erwähnt, besteht der Zweck von XML darin, Daten zu beschreiben und nicht darin, sie anzuzeigen. Aber mit XSLT können wir diese Einschränkung umgehen! Mit XML DOM können Sie einzelne Elemente aus einer XML-Datei abrufen, ändern, hinzufügen oder löschen. Hier ist ein kleines Beispiel, wie das funktioniert. Wir haben eine Books.xml-Datei:

<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J. K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
Es enthält zwei Bücher. Bücher haben ein <title>-Element. Hier können wir JavaScript verwenden, um alle Buchtitel aus unserer XML-Datei abzurufen und den ersten auf der Konsole auszudrucken:

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
Mit DTD („Dokumenttypdefinition“) können Sie eine Liste zulässiger Elemente für eine Entität in einer XML-Datei definieren. Angenommen, wir arbeiten an einer Buchladen-Website und alle Entwicklungsteams sind sich einig, dass für die Buchelemente in den XML-Dateien nur die Attribute „Titel“, „Autor“ und „Jahr“ angegeben werden sollten. Doch wie schützen wir uns vor Unachtsamkeit? Sehr leicht!

<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
Hier haben wir eine Liste gültiger Attribute für <book> definiert. Versuchen Sie dort ein neues Element hinzuzufügen und Sie erhalten sofort eine Fehlermeldung!

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Fehler! „Element mainhero ist hier nicht erlaubt“ Es gibt viele andere XML-Standards. Sie können sich mit jedem einzelnen davon vertraut machen und versuchen, tiefer in den Code einzudringen. Wie auch immer, wenn Sie Informationen zu XML benötigen, finden Sie dort fast alles :) Und damit endet unsere Lektion. Es ist Zeit, sich wieder den Aufgaben zu widmen! :) Bis zum nächsten Mal!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION