Ruby XML-, XSLT- und XPath-Tutorial
Was ist XML?
XML steht für eXtensible Markup Language.
Extensible Markup Language, eine Teilmenge der Standard Generalized Markup Language, ist eine Auszeichnungssprache, die verwendet wird, um elektronische Dokumente auszuzeichnen, um ihnen Struktur zu geben.
Sie kann verwendet werden, um Daten auszuzeichnen und Datentypen zu definieren. Sie ist eine Quellsprache, die es Benutzern ermöglicht, ihre eigene Auszeichnungssprache zu definieren. Sie eignet sich sehr gut für die Übertragung über das World Wide Web und bietet eine einheitliche Methode, um strukturierte Daten zu beschreiben und auszutauschen, die unabhängig von Anwendungen oder Anbietern sind.
Weitere Inhalte finden Sie in unseremXML-Tutorial
XML-Parser-Struktur und API
Es gibt hauptsächlich zwei Arten von XML-Parsern: DOM und SAX.
- Der SAX-Parser basiert auf Ereignisverarbeitung. Er scannt das XML-Dokument von Anfang bis Ende. Während des Scanvorgangs wird jedes Mal, wenn eine syntaktische Struktur angetroffen wird, der Ereignishandler für diese spezifische syntaktische Struktur aufgerufen, um ein Ereignis an die Anwendung zu senden.
- DOM ist das Parsen des Document Object Model. Es erstellt eine hierarchische syntaktische Struktur des Dokuments und erzeugt einen DOM-Baum im Speicher. Die Knoten des DOM-Baums werden in Form von Objekten identifiziert. Nach dem Parsen des Dokuments wird der gesamte DOM-Baum des Dokuments im Speicher abgelegt.
XML in Ruby parsen und erstellen
In Ruby kann die REXML-Bibliothek zum Parsen von XML-Dokumenten verwendet werden.
Die REXML-Bibliothek ist ein XML-Toolkit für Ruby. Sie ist in reinem Ruby geschrieben und entspricht der XML 1.0-Spezifikation.
In Ruby 1.8 und später ist REXML in der Ruby-Standardbibliothek enthalten.
Der Pfad der REXML-Bibliothek ist: rexml/document
Alle Methoden und Klassen sind in einem REXML-Modul gekapselt.
Der REXML-Parser hat die folgenden Vorteile gegenüber anderen Parsern:
- 100% in Ruby geschrieben.
- Anwendbar auf SAX- und DOM-Parser.
- Es ist leichtgewichtig, mit weniger als 2000 Codezeilen.
- Leicht verständliche Methoden und Klassen.
- Basiert auf der SAX2-API und vollständiger XPath-Unterstützung.
- Mit Ruby installiert, keine separate Installation erforderlich.
Das Folgende ist der XML-Code für das Beispiel, gespeichert als movies.xml:
DOM-Parser
Lassen Sie uns zuerst die XML-Daten parsen. Zuerst importieren wir die Bibliothek rexml/document. Normalerweise können wir REXML in den Top-Level-Namensraum importieren:
Beispiel
Das Ausgabeergebnis des obigen Beispiels ist:
Root element : New Arrivals Movie Title : Enemy Behind Movie Title : Transformers Movie Title : Trigun Movie Title : Ishtar Movie Type : War, Thriller Movie Type : Anime, Science Fiction Movie Type : Anime, Action Movie Type : Comedy Movie Description : Talk about a US-Japan war Movie Description : A schientific fiction Movie Description : Vash the Stampede! Movie Description : Viewable boredom SAX-like Parsing:
SAX-Parser
Um dieselbe Datendatei zu verarbeiten: movies.xml, SAX-Parsing wird für eine kleine Datei nicht empfohlen. Das Folgende ist ein einfaches Beispiel:
Beispiel
Das Ausgabeergebnis des Obigen ist:
tag_start: "collection", {"shelf"=>"New Arrivals"}
tag_start: "movie", {"title"=>"Enemy Behind"}
tag_start: "type", {}
text : "War, Thriller"
tag_start: "format", {}
tag_start: "year", {}
tag_start: "rating", {}
tag_start: "stars", {}
tag_start: "description", {}
text : "Talk about a US-Japan war"
tag_start: "movie", {"title"=>"Transformers"}
tag_start: "type", {}
text : "Anime, Science Fiction"
tag_start: "format", {}
tag_start: "year", {}
tag_start: "rating", {}
tag_start: "stars", {}
tag_start: "description", {}
text : "A schientific fiction"
tag_start: "movie", {"title"=>"Trigun"}
tag_start: "type", {}
text : "Anime, Action"
tag_start: "format", {}
tag_start: "episodes", {}
tag_start: "rating", {}
tag_start: "stars", {}
tag_start: "description", {}
text : "Vash the Stampede!"
tag_start: "movie", {"title"=>"Ishtar"}
tag_start: "type", {}
tag_start: "format", {}
tag_start: "rating", {}
tag_start: "stars", {}
tag_start: "description", {}
text : "Viewable boredom"
XPath und Ruby
Wir können XPath verwenden, um XML anzuzeigen. XPath ist eine Sprache zum Auffinden von Informationen in XML-Dokumenten (siehe:XPath-Tutorial).
XPath ist die XML Path Language. Sie ist eine Sprache, mit der die Position eines Teils in einem XML-Dokument (einer Teilmenge der Standard Generalized Markup Language) bestimmt wird. XPath basiert auf der Baumstruktur von XML und bietet die Möglichkeit, Knoten im Datenstrukturbaum zu finden.
Ruby unterstützt XPath über die XPath-Klasse von REXML, die auf der Baumanalyse (Document Object Model) basiert.
Beispiel
Das Ausgabeergebnis des obigen Beispiels ist:
<movie title='Enemy Behind'> ... </> War, Thriller Anime, Science Fiction Anime, Action Comedy ["DVD", "DVD", "DVD", "VHS"]
XSLT und Ruby
In Ruby gibt es zwei XSLT-Parser. Eine kurze Beschreibung folgt unten:
Ruby-Sablotron
Dieser Parser wurde von Masayoshi Takahash geschrieben und gepflegt. Er wurde hauptsächlich für das Linux-Betriebssystem geschrieben und erfordert die folgenden Bibliotheken:
- Sablot
- Iconv
- Expat
Sie können diese Bibliotheken beiRuby-Sablotronfinden.
XSLT4R
XSLT4R wurde von Michael Neumann geschrieben. XSLT4R wird für einfache Kommandozeilen-Interaktion verwendet und kann von Anwendungen von Drittanbietern zum Transformieren von XML-Dokumenten genutzt werden.XSLT4R benötigt XMLScan zum Betrieb; XMLScan ist im XSLT4R-Archiv enthalten. Es ist ein 100%iges Ruby-Modul. Diese Module können mit der standardmäßigen Ruby-Installationsmethode installiert werden (d. h. ruby install.rb).
Das Syntaxformat von XSLT4R ist wie folgt:
Wenn Sie XSLT4R in Ihrer Anwendung verwenden möchten, können Sie XSLT einbinden und die benötigten Parameter eingeben. Das Beispiel sieht wie folgt aus:
Beispiel
Weitere Ressourcen
- Für den vollständigen REXML-Parser lesen Sie bitte die DokumentationREXML-Parser-Dokumentation。
- Sie könnenRAA Knowledge BaseXSLT4R herunterladen von