English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
XML signifie le langage de balisage extensible (eXtensible Markup Language).
Langage de balisage extensible, sous-ensemble du langage de balisage général standard, un langage de balisage utilisé pour marquer des documents électroniques afin qu'ils aient une structure.
Il peut être utilisé pour marquer des données, définir des types de données, c'est une source de langage qui permet aux utilisateurs de définir leur propre langage de balisage. Il est très approprié pour le transfert du web, fournissant une méthode uniforme pour décrire et échanger des données structurées indépendantes de l'application ou du fournisseur.
Pour plus de détails, veuillez consulter notre Tutoriel XML
Les analyseurs XML principaux sont DOM et SAX.
L'analyseur SAX est basé sur le traitement des événements, il faut scanner le document XML de la tête à la queue, pendant le processus de balayage, chaque fois qu'il rencontre une structure syntaxique, il appelle le programme de traitement des événements de cette structure syntaxique spécifique et envoie un événement à l'application.
DOM est le modèle objet de document (DOM) pour analyser, construire une structure syntaxique hiérarchique de document, établit un arbre DOM en mémoire, les nœuds de l'arbre DOM sont identifiés sous forme d'objets, après l'analyse du document, l'arbre DOM entier du document sera placé en mémoire.
L'analyse de documents XML en Ruby peut utiliser cette bibliothèque REXML.
La bibliothèque REXML est un ensemble d'outils XML pour ruby, écrite en pure Ruby, conforme à XML1.0 spécification.
Dans Ruby1.8et versions ultérieures, RUBY standard library contiendra REXML.
Le chemin de la bibliothèque REXML est : rexml/document
Toutes les méthodes et classes sont encapsulées dans un module REXML.
Les avantages de l'analyseur REXML par rapport aux autres analyseurs sont les suivants :
100% écrit en Ruby.
Appliquable aux analyseurs SAX et DOM.
C'est léger, pas plus de2000 lignes de code.
Méthodes et classes faciles à comprendre.
Basé sur SAX2 Support complet de l'API et de l'XPath.
Il peut être installé avec Ruby sans installation séparée.
Voici un exemple de code XML, sauvegardé sous movies.xml :
<collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Parler d'un US-Guerre du Japon</description> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>Une science-fiction</description> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>Comédie</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Boredom visible</description> </movie> </collection>
Laissons d'abord analyser les données XML, d'abord, nous devons d'abord inclure rexml/La bibliothèque document, nous pouvons généralement inclure REXML dans l'espace de noms de niveau supérieur :
#!/usr/bin/ruby -w require 'rexml'/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # Obtenir l'élément root root = xmldoc.root puts "Element racine : " + root.attributes["shelf"] # Voici la sortie des titres de films xmldoc.elements.each("collection",/movie"){ |e| puts "Titre du film : " + e.attributes["title"] } # Voici la sortie de tous les types de films xmldoc.elements.each("collection",/movie/type") { |e| puts "Type de film : " + e.text } # Voici la sortie de toutes les descriptions de films xmldoc.elements.each("collection",/movie/description) { |e| puts "Description du film : " + e.text }
Le résultat de la sortie de l'exemple ci-dessus est :
Élément racine : New Arrivals Titre du film : Enemy Behind Titre du film : Transformers Titre du film : Trigun Titre du film : Ishtar Type de film : Guerre, Thriller Type de film : Anime, Science Fiction Type de film : Anime, Action Type de film : Comédie Description du film : Parler d'un US-Guerre japonaise Description du film : Une science-fiction Description du film : Vash the Stampede! Description du film : Boredom visible SAX-comme Analyse :
Traitement du même fichier de données : movies.xml, il est déconseillé d'utiliser SAX pour un fichier de petite taille, voici un exemple simple :
#!/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(', ')}" fin def text(data) return if data =~ /^\w*$/ # seuls des espaces blancs abbrev = data[0..40] + (data.length > 40 ? "..." : "") puts "texte : #{abbrev.inspect}" fin fin list = MyListener.new xmlfile = File.new("movies.xml") Document.parse_stream(xmlfile, list)
Le résultat de la sortie ci-dessus est :
tag_start: "collection", {"shelf"=>"New Arrivals"} tag_start: "movie", {"title"=>"Enemy Behind"} tag_start: "type", {} texte : "Guerre, Thriller" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} texte : "Parler d'une guerre américaine-guerre du Japon" tag_start: "movie", {"title"=>"Transformers"} tag_start: "type", {} texte : "Anime, Science Fiction" tag_start: "format", {} tag_start: "year", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} texte : "Une science-fiction" tag_start: "movie", {"title"=>"Trigun"} tag_start: "type", {} texte : "Anime, Action" tag_start: "format", {} tag_start: "episodes", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} texte : "Vash the Stampede!" tag_start: "movie", {"title"=>"Ishtar"} tag_start: "type", {} tag_start: "format", {} tag_start: "rating", {} tag_start: "stars", {} tag_start: "description", {} texte : "Boredom visible"
Nous pouvons utiliser XPath pour visualiser XML, XPath est un langage utilisé pour trouver des informations dans un document XML (voir :Tutoriel XPath)。
XPath est le langage de chemin XML, un langage utilisé pour déterminer la position d'une partie d'un document XML (sous-ensemble du langage de balisage général standard). XPath est basé sur la structure arborescente de XML et offre la capacité de trouver des nœuds dans une structure de données arborescente.
Ruby prend en charge XPath via la classe XPath de REXML, qui est basée sur une analyse en arbre (modèle objet de document).
#!/usr/bin/ruby -w require 'rexml'/document' include REXML xmlfile = File.new("movies.xml") xmldoc = Document.new(xmlfile) # Informations sur le premier film film = XPath.first(xmldoc, ""//film) p film # Imprimer tous les types de films XPath.each(xmldoc, ""//type) { |e| puts e.text } # Obtenir tous les types de formats de films, retourner un tableau noms = XPath.match(xmldoc, ""//format).map { |x| x.text } p noms
Le résultat de la sortie de l'exemple ci-dessus est :
<movie title='Enemy Behind'> ... </> Guerre, Thriller Anime, Science Fiction Anime, Action Comédie ["DVD", "DVD", "DVD", "VHS"]
Il y a deux analyseurs XSLT dans Ruby. Voici une description succincte :
Ce analyseur a été écrit et maintenu par Masayoshi Takahashi. Il a été principalement écrit pour le système d'exploitation Linux et nécessite les bibliothèques suivantes :
Sablot
Iconv
Expat
Vous pouvez dans Ruby-Sablotron Trouvez ces bibliothèques.
XSLT4R a été écrit par Michael Neumann. XSLT4R est utilisé pour des interactions en ligne de commande simples et peut être utilisé par des applications tierces pour convertir des documents XML.
XSLT4R nécessite l'opération XMLScan, qui contient XSLT4L'archive R, qui est une100% des modules Ruby. Ces modules peuvent être installés avec la méthode d'installation standard de Ruby (c'est-à-dire Ruby install.rb).
XSLT4Le format de syntaxe de R est le suivant :
ruby xslt.rb stylesheet.xsl document.xml [arguments]
Si vous souhaitez utiliser XSLT dans une application4R, vous pouvez inclure XSLT et entrer les paramètres nécessaires. Voici un exemple :
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 )
Parseur REXML complet, voir la documentation Documentation du parseur REXML。
Vous pouvez partir de Base de connaissances RAA Télécharger XSLT ici4R 。