English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
XML steht für erweiterbares Markup Language (eXtensible Markup Language).
Das erweiterte Markup-Sprache, eine Teilmenge des Standard Generalized Markup Language, ist eine Markup-Sprache, die verwendet wird, um elektronische Dokumente zu kennzeichnen und sie strukturiert zu machen.
Es kann verwendet werden, um Daten zu kennzeichnen, Datentypen zu definieren und ist eine Quellsprache, die es Benutzern ermöglicht, ihre eigene Markup-Sprache zu definieren. Es ist besonders geeignet für den Transfer im World Wide Web und bietet eine einheitliche Methode zur Beschreibung und Austausch von strukturierten Daten, die unabhängig von Anwendungen oder Anbietern sind.
Für mehr Informationen siehe unsere XML-Tutorial
Die Hauptarten der XML-Parsen sind DOM und SAX.
Der SAX-Parser basiert auf Ereignisverarbeitung und erfordert, dass das XML-Dokument von Anfang bis Ende gescannt wird. Während des Scans wird bei jedem Auftreten einer Syntaxstruktur der spezifische Ereignisverarbeitungsprogramm aufgerufen und ein Ereignis an die Anwendung gesendet.
DOM ist die Dokumentobjektmodell-Parsing, das eine hierarchische Syntaxstruktur des Dokuments aufbaut, ein DOM-Baum im Speicher erstellt, die Knoten des DOM-Baums als Objekte kennzeichnet und das gesamte DOM-Baum des Dokuments im Speicher platziert, nachdem das Dokument geparst wurde.
In Ruby kann die Parsing von XML-Dokumenten mit dieser Bibliothek REXML durchgeführt werden.
Die REXML-Bibliothek ist ein XML-Toolkit für Ruby, das in reinem Ruby-Sprachgebrauch geschrieben ist und den XML-Standard einhält.1.0-Norm.
In Ruby1.8Version und höher, RUBY-Standardbibliothek wird REXML enthalten.
Der Pfad zur REXML-Bibliothek ist: rexml/document
Alle Methoden und Klassen sind in einem REXML-Modul verpackt.
REXML-Parser hat die folgenden Vorteile gegenüber anderen Parseibern:
100% von Ruby geschrieben.
Eignet sich für SAX- und DOM-Parser.
Es ist leichtgewichtig, weniger als2000 Zeilen Code.
Einfach verständliche Methoden und Klassen.
Basierend auf SAX2 API und vollständige XPath-Unterstützung.
Mit Ruby installiert, ohne eine separate Installation.
Nachfolgendes ist ein Beispiel für XML-Code, speichern Sie ihn als movies.xml:
<collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>Krieg, Thriller</type> <format>DVD</format> <jahr>2003</jahr> <bewertung>PG</bewertung> <stars>10</stars> <beschreibung>Reden wir über einen US-Japanischer Krieg</beschreibung> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <jahr>1989</jahr> <bewertung>R</bewertung> <stars>8</stars> <beschreibung>Eine wissenschaftliche Fiktion</beschreibung> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episoden>4</episoden> <bewertung>PG</bewertung> <stars>10</stars> <beschreibung>Vash the Stampede!</beschreibung> </movie> <movie title="Ishtar"> <type>Komödie</type> <format>VHS</format> <bewertung>PG</bewertung> <stars>2</stars> <beschreibung>Anschaubarer Langeweile</beschreibung> </movie> </Kollektion>
Lassen Sie uns zunächst die XML-Daten analysieren,首先要引入 rexml/document-Bibliothek, normalerweise können wir REXML in der obersten Namensräume einfügen:
#!/usr/bin/ruby -w require 'rexml'/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # Erhalten des root Elements root = xmldoc.root puts "Wurzelelement : " + root.attributes["shelf"] # Hier wird Filmtitel ausgegeben xmldoc.elements.each("collection",/movie"){ |e| puts "Film Titel: " + e.attributes["title"] } # Hier wird alle Filmtypen ausgegeben xmldoc.elements.each("collection",/movie/type") { |e| puts "Film Typ: " + e.text } # Hier wird alle Filmbeschreibungen ausgegeben xmldoc.elements.each("collection",/movie/description") { |e| puts "Film Beschreibung: " + e.text }
Der obige Beispiel-Ausgabeergebnis ist:
Wurzelelement: Neue Ankünfte Film Titel: Enemy Behind Film Titel: Transformers Film Titel: Trigun Film Titel: Ishtar Film Typ: Krieg, Thriller Film Typ: Anime, Science Fiction Film Typ: Anime, Action Film Typ: Komödie Film Beschreibung: Über ein US-Japanischer Krieg Film Beschreibung: Eine wissenschaftliche Fiktion Film Beschreibung: Vash the Stampede! Film Beschreibung: Ansichtswertung SAX-wie Parsing:
Verarbeitung desselben Daten日期is: movies.xml, es wird nicht empfohlen, SAX für eine kleine Datei zu verwenden, hier ist ein einfaches Beispiel:
#!/usr/bin/ruby -w require 'rexml'/document' require 'rexml'/streamlistener' include REXML class MyListener include REXML::StreamListener def tag_start(*args) puts "tag_start: #{args.map {|x| x.inspect}.join(', ')}" ende def text(data) return if data =~ /^\w*$/ # Leere Zeichen nur abbrev = data[0..40] + (data.length > 40 ? "..." : "") puts " text: #{abbrev.inspect}" ende ende list = MyListener.new xmlfile = File.new("movies.xml") Document.parse_stream(xmlfile, list)
Die obige Ausgabe ist:
tag_start: "Sammlung", {"Regal": "Neuankömmlinge"} tag_start: "Film", {"title": "Feind im Rücken"} tag_start: "Typ", {} text: "Krieg, Thriller" tag_start: "Format", {} tag_start: "Jahr", {} tag_start: "Bewertung", {} tag_start: "Sterne", {} tag_start: "Beschreibung", {} text: "Reden wir über einen US-Japanischer Krieg tag_start: "Film", {"title": "Transformers"} tag_start: "Typ", {} text: "Anime, Science Fiction" tag_start: "Format", {} tag_start: "Jahr", {} tag_start: "Bewertung", {} tag_start: "Sterne", {} tag_start: "Beschreibung", {} text: "Eine wissenschaftliche Fiktion" tag_start: "Film", {"title": "Trigun"} tag_start: "Typ", {} text: "Anime, Action" tag_start: "Format", {} tag_start: "Episoden", {} tag_start: "Bewertung", {} tag_start: "Sterne", {} tag_start: "Beschreibung", {} text: "Vash the Stampede!" tag_start: "Film", {"title": "Ishtar"} tag_start: "Typ", {} tag_start: "Format", {} tag_start: "Bewertung", {} tag_start: "Sterne", {} tag_start: "Beschreibung", {} text: "Ansichtswertlose Langeweile"
Wir können XPath verwenden, um XML anzuzeigen, XPath ist eine Sprache zur Suche nach Informationen in XML-Dokumenten (Ansicht:)XPath-Tutorial)。
XPath ist die XML-Path-Sprache, eine Sprache zur Bestimmung des Standorts eines Teils eines XML-Dokuments (Abteilung des Standardgenerellen Markup-Sprachens). XPath basiert auf der Baumstruktur von XML und bietet die Fähigkeit, Knoten in der Datenstrukturen-Baum zu finden.
Ruby unterstützt XPath über die REXML-Klasse, die auf einer Baumanalyse (Dokumentobjektmodell) basiert.
#!/usr/bin/ruby -w require 'rexml'/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # Informationen des ersten Films movie = XPath.first(xmldoc, ""//movie) p movie # Alle Filmtypen drucken XPath.each(xmldoc, ""//type) { |e| puts e.text } # Alle Filmformate-Typen erhalten, Array zurückgeben names = XPath.match(xmldoc, ""//format).map { |x| x.text } p names
Der obige Beispiel-Ausgabeergebnis ist:
<movie title='Enemy Behind'> ... </> War, Thriller Anime, Science Fiction Anime, Action Comedy ["DVD", "DVD", "DVD", "VHS"]
Ruby hat zwei XSLT-Parser. Nachfolgend finden Sie eine kurze Beschreibung:
Dieser Parser wurde von Masayoshi Takahashi geschrieben und gepflegt. Er wurde hauptsächlich für den Linux-Betriebssystem written, und erfordert die folgenden Bibliotheken:
Sablot
Iconv
Expat
Sie können Ruby-Sablotron Diese Bibliotheken finden Sie.
XSLT4R wurde von Michael Neumann geschrieben. XSLT4R wird für einfache Kommandozeileninteraktionen verwendet und kann von Drittanbieteranwendungen verwendet werden, um XML-Dokumente zu konvertieren.
XSLT4R benötigt die XMLScan-Operation und enthält XSLT4R-Archiv, das ist ein100% der Ruby-Module. Diese Module können mit den Standard-Ruby-Installationsmethoden (d.h. Ruby install.rb) installiert werden.
XSLT4R-Syntax-Format wie folgt:
ruby xslt.rb stylesheet.xsl document.xml [arguments]
Wenn Sie XSLT in einer Anwendung verwenden möchten4R, Sie können XSLT einbinden und die erforderlichen Parameter eingeben. Ein Beispiel ist wie folgt:
require "xslt" stylesheet = File.readlines("stylesheet.xsl").to_s xml_doc = File.readlines("document.xml").to_s arguments = { 'image_dir' => '/....' } sheet = XSLT::Stylesheet.new( stylesheet, arguments ) # output to StdOut sheet.apply( xml_doc ) # output to 'str' str = "" sheet.output = [ str ] sheet.apply( xml_doc )
完整的 REXML 解析器,请查看文档 REXML 解析器文档。
你可以从 RAA 知识库 从中下载 XSLT4R 。