# XML-Parsing durch DOM



## oraclin25 (12. Januar 2013)

Hallo zusammen,

ich hätte eine Konzept-Frage bzgl. DOM, Parser und XML-Dokument:
ich habe ein bisschen gegoogelt, leider verstehe ich das Konzept noch nicht so richtig.  Wenn ich also ein XML-Dokument habe und möchte dieses verarbeiten, dann könnte ich dies mit Hilfe von DOM tun.  

Was ist also DOM?  
Ich habe so verstanden, dass es DOM-API gibt.  Nach Wiki verstehe ich DOM als die Repräsentation von beispielweise einem XML-Dokument.  Durch dieses Dokument kann dann ein Parser parsen.   Nach dem Parsing entsteht dann ein sogenanntes DOM-Objekt.  Ist das richtig so?  Was macht man dann mit dem DOM-Objekt? 

Vielen Dank.

Schöne Grüße aus Rheinland,

Eure Ratna


----------



## oraclin25 (13. Januar 2013)

Hallo zusammen,

bin inzwischen etwas schlauer geworden:
DOM ist ersmal ein Standard, wie ein XML-Dokument auszusehen hat, nämlich in Form eines Graphbaumes.  Diese Umwandung von XML-Dokument auf den Graphbaum erledigt der DOM-Parser.  Der Graphbaum wird auch als DOM-Objekt bezeichnet.  Danach kann auf diesem Graphbaum traversiert werden, dies bietet die DOM-API an.

Nun meine Frage:
Ist es möglich, dass auf dem Graphbaum mittels XSLT-Parser transformiert wird?  

Vielen Dank.

Schöne Grüße aus Rheinland,

Eure Ratna


----------



## alxy (13. Januar 2013)

Ähm,

DOM = Document Object Model ist, wie du bereits herausgefunden hast, eine Spezifikation, eine abstrakte Schnittstelle sozusagen, von der es jetzt konkrete Ableitungen gibt, wie zB
XML = Extensible Markup Language. Ein XML-Dokument ist somit sozusagen schon eine Baumstruktur, das erfordert die Schnittstelle ja  Da du auchnoch Graphbaum ansprichst - meinst du damit tatsächlich eine grafisch sichtbare Struktur? Die hier angesprochene Struktur ist "reines" XML erstmal, zum Präsentieren der Daten kann dann XSLT verwendet werden. Guck dir dieses beispiel dazu an: http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog
Die arbeiten zusammen wie HTML und CSS


----------



## oraclin25 (13. Januar 2013)

Hallo alxy, 

vielen Dank für die rasche Antwort.  Ich habe soweit verstanden, was mit DOM und XSLT gemeint ist.
Bei einem Punkt bin ich mir nicht so sicher:
1. Ich habe ein XML-Dokument
2. Ich parse das Dokument mit einem DOM-Parser und erhalte den Graphbaum
3. Auf diesem Graphbaum kann ich das Dokument mit einem XSLT-Applikation in eine Ausgabe transformieren.

Meine Frage:
Soweit ich weiss, kann auf einem XML-Dokument direkt eine XSLT-Applikation ablaufen.  Warum möchte man bei obiger Konstellation das XML-Dokument zunächst einmal mittels DOM, bevor anschließend mit einer XSLT-Applikation verarbeiten?

Vielen lieben Dank zusammen.

Schöne Grüße aus Rheinland,

Eure Ratna


----------



## hela (13. Januar 2013)

oraclin25 hat gesagt.:


> ...
> Soweit ich weiss, kann auf einem XML-Dokument direkt eine XSLT-Applikation ablaufen...


Hallo,
wie sollte das gehen? Du brauchst ein Rahmenprogramm, dass das XML-Dokument parsen kann *und *einen XSLT-Prozessor bereitstellt.


----------



## alxy (13. Januar 2013)

Soviele lustige Wörter....



> 2. Ich parse das Dokument mit einem DOM-Parser und erhalte den Graphbaum
> 3. Auf diesem Graphbaum kann ich das Dokument mit einem XSLT-Applikation in eine Ausgabe transformieren.



Zu 2.) Was meinst du mit Graphbaum? Was ist für dich ein DOM-Parser? [Ein Parser verwandelt grundsätzlich erstmal eine Eingabe (zB im XML-Format) in ein für das Programm/den Computer weiterverarbeitbares Format, zB um dann später spezielle Dinge(Knoten) auslesen oder verändern zu können]

Zu 3.) Du kannst eine XML-Datei auch so eifnach mit jedem beliebigen Editor/Browser/Textverrbeitungsprogramm öffnen und darstellen  Nur natürlich nicht so schön.


----------



## oraclin25 (13. Januar 2013)

Hallo hela und alxy,

vielen Dank für Eure Hilfestellungen.  Aus Wiki:



> Die Sprache XSLT beschreibt die Umwandlung eines XML-Derivats (auch XML-Dialekt oder XML-Anwendung genannt), in Form eines XML-Dokuments, in ein anderes Dokument, Transformation genannt.
> ...
> Dazu werden die XML-Dokumente als logischer Baum betrachtet: Die Quellbäume der zu transformierenden Dokumente und die durch die Transformation entstehenden Zielbäume der zu erzeugenden Dokumente



Mit meiner Frage meinte ich:
Kann ich die notwendige Baumstruktur für XSLT-Transformation mit Hilfe von einem DOM-Parser erzeugen?  Also, ich habe das so verstanden, dass ein DOM-Parser lediglich dazu da ist, um die Baumstruktur eines XML-Dokuments zu erzeugen.  Dass man dann auf dieser Baumstruktur die DOM-API verwenden kann, das lass ich erstmal ausgeklammert.  

Ich möchte gerne verstehen, ob es einen Zusammenhang gibt zwischen DOM-Parser und XSLT.  

Vielen lieben Dank.

Schöne Grüße aus Rheinland,

Eure Ratna


----------



## saftmeister (13. Januar 2013)

oraclin25 hat gesagt.:


> Ich möchte gerne verstehen, ob es einen Zusammenhang gibt zwischen DOM-Parser und XSLT.



Hoffentlich nicht ;-)

Normalerweise wird ein XSLT-Processor seine eigene Bibliothek zum Parsen den XML mitbringen, da die meisten DOM-Parser für den Anwendungszweck der Transformation nicht optimiert sind.

Der XSLT-Processor hat natürlich eine ähnliche Funktionalität, um Features wie X-Path zur Verfügung stellen zu können.

Hier mal ein Zitat:


			
				http://www.ibm.com/developerworks/xml/library/x-xslang/ hat gesagt.:
			
		

> Although modern XSLT processors don't use DOM internally for performance reasons (an optimized library is more efficient), it helps to think of XSLT as a language that converts a DOM tree into another DOM tree.


----------



## oraclin25 (13. Januar 2013)

Hallo saftmeister,

Danke. Mhhh... Dieser parser, nenne ich mal ein softwaremodul, ist aber einem xslt-prozessor nicht gleich, oder?

Schöne grüße aus rheinland,

Eure ratna


----------



## saftmeister (13. Januar 2013)

Eigentlich nicht. Ein DOM-Parser erledigt ein manchmal auch zwei Dinge:

1. (optional) Validieren des XML gegen ein Schema (XSD).
2. Parsen des XML in Objekte der für den DOM-Parser zugehörigen Programmiersprache.

Dafür benötigt der Parser natürlich das XML selbst, und eine Kenntniss darüber, welche Klasse die Struktur des XML-Knotens im Programm abbildet.

Ich kenne deine Kenntnisse nicht, aber vielleicht schaust du dir mal an, wie das in Java gemacht wird:

http://jaxb.java.net/tutorial/section_2_2_1-JAXB-Examples.html#Defining an Integer Range Type
http://jaxb.java.net/tutorial/section_2_2_2-Numeric-Types.html#Numeric Types


----------



## oraclin25 (13. Januar 2013)

Mhhh... Dein letzter Beitrag bezieht sich, wenn ich nicht irre, auf DOM-Parser.  Ist der Begriff DOM-Parser eigentlich ein Oberbegriff für XSLT-Parser?  Denn, eigentlich habe ich es so verstanden, dass die Baumstruktur bzw. das Ergebniss eines DOM-Parsers nicht für die XSLT-Transformation konzipiiert ist. Wenn das so ist, dann gibt es zur XSLT-Transformation einen geeigneteren Parser.  Ich nenne diesen mal als "XSLT-Parser", aber bestimmt nicht ein DOM-Parser.  

Och je, hoffentlich ist mein Problem einigermaßen verständlich?

Schöne Grüße aus Rheinland,

Eure ratna


----------



## saftmeister (13. Januar 2013)

Absolut ja. Ich bin auf dem Gebiet auch kein Profi, aber das war ich bisher darüber weiß deckt sich mit deiner Aussage.

Also hier mal zwei Punkte:

1. Ein DOM-Parser lädt XML in programm-interne Strukturen (Klassen) für die programmatische Verarbeitung (um z.B. eine Ansicht über alle Kunden in einem Programm einzubauen, wobei die Kunden in einem XML-File stehen). Stelle dir eine Anwendung (GUI) vor, die eine Tabelle (nicht HTML!) beinhaltet, in der alle Datensätze angezeigt werden. Du kannst dann mit der Maus einen Datensatz doppelt anklicken und bekommst eine weitere GUI, in der du den Kunden bearbeiten kannst. Da programm-intern mit Objekten gearbeitet wird, die aus Klassen (Objekt-Schablone) erstellt wurden, benötigt es einen DOM-Parser, der das XML parst und daraus Objekte macht.

2. Ein XSLT-Processor hat einen XML-Parser (eine Art DOM-Parser, ist aber keiner) eingebaut. Der XSLT-Processor nimmt also das XML her und transformiert es anhand einer XSLT-Datei (welche die Anweisungen enthält wie zu transformieren ist) in das gewünschte Ausgabe-Format (z.B. HTML).


----------



## hela (13. Januar 2013)

saftmeister hat gesagt.:


> Absolut ja. Ich bin auf dem Gebiet auch kein Profi, aber das war ich bisher darüber weiß deckt sich mit deiner Aussage...


Ich bin auch kein Profi, aber so absolut würde ich das nicht sehen. Das ist m.E. von der Umgebung abhängig. Leider habe ich zu wenig Kenntnisse in Java (letzten 10 Jahre nichts gemacht), aber in PHP kann man beispielsweise dem XSLT-Prozessor nur DOM-Dokumente anbieten, also mit der DOMDocument-Klasse geparste XML- oder HTML-Dokumente.


----------



## oraclin25 (13. Januar 2013)

Hallo saftmeister,

Danke für die ausführliche Erklärung.  Ich bin ja froh, dass du meine problematik verstanden hast.  Sorry, wenn ich zu detailliert nachgefragt habe, aber frau ist manchmal etwas kleinlich 
Ich frage gerne solange nach bis die sache in meine logik passt.

Schöne Grüße aus Rheinland,

Eure Ratna


----------



## saftmeister (13. Januar 2013)

hela hat gesagt.:


> aber in PHP kann man beispielsweise dem XSLT-Prozessor nur DOM-Dokumente anbieten, also mit der DOMDocument-Klasse geparste XML- oder HTML-Dokumente.



Nunja, deswegen schrieb ich auch weiter oben, dass ein XSLT-Processor hoffentlich keinen DOM-Parser beinhaltet, was bei PHP anscheinend auch der Fall ist. Dort hat der XSLT-Processor offensichtlich gar keinen XML-Parser und es muss die DOMDocument-Klasse bzw. SimpleXML dafür herhalten ;-) Ob das performant ist, wage ich nicht zu beurteilen.



oraclin25 hat gesagt.:


> Ich frage gerne solange nach bis die sache in meine logik passt.



Oyoyo, was ist denn, wenn deine Logik nicht zur Sache passt? ;-)


----------



## oraclin25 (13. Januar 2013)

Hallo zusammen, 

Wenn ich das richtig verstanden habe, hängt es also von der programmiersprache ab, was ein xslt-prozessor so alles kann bzw. was ein xslt-prozessor so beinhaltet?  Wie sieht es zum beispiel unter java aus? Ist ein eigener Parser darunter im Umfang enthalten?

Vielen Dank.

Schöne Grüße aus Rheinland.

Eure Ratna


----------



## hela (13. Januar 2013)

Wenn du XSLT machen willst, dann ist es m.E. wichtig zu wissen welchen XSLT-Prozessor die umgebende  Sprache verwendet und was der kann. Eine (etwas ältere) Übersicht gibt es hier: http://www.oio.de/public/xml/xslt-prozessoren.htm
Wie der verwendete XSLT-Prozessor die Daten übergeben haben möchte ergibt sich dann offensichtlich damit.


----------

