Tutorial Ruby XML, XSLT dan XPath Tutorial Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari Apa XML?,XML parser dan struktur API,Ruby untuk mengurai dan membuat XML,DOM parser,parser SAX,XPath dan Ruby,XSLT dan Ruby,informasi lebih lanjut,

Ruby XML, XSLT dan XPath Tutorial

Apa XML?

Hal ini mengacu pada Extensible Markup Language XML (eXtensible Markup Language).

Extensible Markup Language, subset dari Standard Generalized Markup Language, sebuah metode untuk menandai dokumen elektronik memiliki bahasa markup terstruktur.

Hal ini dapat digunakan untuk menandai data, mendefinisikan jenis data, adalah teknologi yang memungkinkan pengguna untuk menentukan bahasa markup sumber bahasa mereka sendiri. Ini sangat ideal untuk transmisi Web, menyediakan pendekatan terpadu untuk menggambarkan dan bertukar independen dari aplikasi atau vendor data terstruktur.

Untuk informasi lebih lanjut, silakan lihat kami tutorial XML


XML parser dan struktur API

XML parser SAX dan DOM terutama dua jenis.

  • SAX parser adalah pengolahan berbasis event, pemindaian dokumen XML perlu dari awal sampai akhir lagi, dalam proses scanning, setiap kali mengalami struktur gramatikal, ia akan memanggil event handler struktur gramatikal tertentu, mengirim aplikasi sebuah acara.
  • DOM Dokumen analisis Object Model, hirarkis membangun struktur gramatikal dokumen, membangun pohon DOM di memori simpul pohon DOM sebagai objek untuk mengidentifikasi, dokumen parsing Wencheng, pohon DOM keseluruhan akan mendokumentasikan dalam memori.

Ruby untuk mengurai dan membuat XML

RUBY parsing dokumen XML dapat menggunakan perpustakaan REXML perpustakaan ini.

REXML perpustakaan adalah ruby ​​XML toolkit adalah dengan menggunakan bahasa Ruby murni, mengikuti norma-norma XML1.0.

Dalam versi Ruby1.8 dan kemudian, perpustakaan akan berisi RUBY REXML.

Jalan REXML perpustakaan adalah: REXML / dokumen

Semua metode dan kelas yang dikemas ke dalam modul REXML.

REXML parser memiliki beberapa keuntungan atas parser lain:

  • 100% ditulis oleh Ruby.
  • Berlaku untuk Sax dan DOM parser.
  • Hal ini ringan, kurang dari 2000 baris kode.
  • Mudah untuk memahami metode dan kelas.
  • Berdasarkan API sax2 dan dukungan XPath penuh.
  • Gunakan instalasi Ruby, tanpa memerlukan instalasi terpisah.

Berikut ini adalah contoh kode XML, simpan sebagai 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>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
   <type>Anime, Science Fiction</type>
   <format>DVD</format>
   <year>1989</year>
   <rating>R</rating>
   <stars>8</stars>
   <description>A schientific 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>Comedy</type>
   <format>VHS</format>
   <rating>PG</rating>
   <stars>2</stars>
   <description>Viewable boredom</description>
</movie>
</collection>

DOM parser

Mari kita mulai untuk mengurai data XML Pertama kami memperkenalkan perpustakaan REXML / dokumen, kita biasanya bisa di top-level namespace REXML diperkenalkan:

#!/usr/bin/ruby -w

require 'rexml/document'
include REXML

xmlfile = File.new("movies.xml")
xmldoc = Document.new(xmlfile)

# 获取 root 元素
root = xmldoc.root
puts "Root element : " + root.attributes["shelf"]

# 以下将输出电影标题
xmldoc.elements.each("collection/movie"){ 
   |e| puts "Movie Title : " + e.attributes["title"] 
}

# 以下将输出所有电影类型
xmldoc.elements.each("collection/movie/type") {
   |e| puts "Movie Type : " + e.text 
}

# 以下将输出所有电影描述
xmldoc.elements.each("collection/movie/description") {
   |e| puts "Movie Description : " + e.text 
}

Contoh di atas output:

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:

parser SAX

Pengolahan data file yang sama: movies.xml, SAX parsing tidak dianjurkan sebagai file kecil, berikut ini adalah contoh sederhana:

#!/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(', ')}"
  end

  def text(data)
    return if data =~ /^\w*$/     # whitespace only
    abbrev = data[0id40] + (data.length > 40 ? "id." : "")
    puts "  text   :   #{abbrev.inspect}"
  end
end

list = MyListener.new
xmlfile = File.new("movies.xml")
Document.parse_stream(xmlfile, list)

Di atas output:

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 dan Ruby

Kita dapat menggunakan XPath untuk melihat XML, XPath untuk menemukan informasi adalah dokumen dalam bahasa XML (Lihat: XPath Tutorial ).

XPath adalah XML Jalan Bahasa, itu adalah metode yang digunakan untuk menentukan XML (subset dari Standard Generalized Markup Language) bahasa dokumen bagian dari lokasi. XPath berbasis pohon XML, dan memberikan kemampuan untuk mencari node struktur data di pohon.

Ruby XPath dukungan XPath oleh kelas REXML, yang didasarkan pada analisis (Document Object Model) pohon.

#!/usr/bin/ruby -w

require 'rexml/document'
include REXML

xmlfile = File.new("movies.xml")
xmldoc = Document.new(xmlfile)

# 第一个电影的信息
movie = XPath.first(xmldoc, "//movie")
p movie

# 打印所有电影类型
XPath.each(xmldoc, "//type") { |e| puts e.text }

# 获取所有电影格式的类型,返回数组
names = XPath.match(xmldoc, "//format").map {|x| x.text }
p names

Contoh di atas output:

<movie title='Enemy Behind'> id. </>
War, Thriller
Anime, Science Fiction
Anime, Action
Comedy
["DVD", "DVD", "DVD", "VHS"]

XSLT dan Ruby

Ruby memiliki dua XSLT parser, deskripsi singkat diberikan di bawah ini:

Ruby-Sablotron

parser ini ditulis dan dipelihara oleh keadilan Masayoshi Takahash. Hal ini terutama ditulis untuk sistem operasi Linux, Anda memerlukan perpustakaan berikut:

  • Sablot
  • iconv
  • expat

Anda dapat Ruby-Sablotron menemukan perpustakaan tersebut.

XSLT4R

XSLT4R ditulis oleh Michael Neumann. XSLT4R untuk interaksi baris perintah sederhana, aplikasi pihak ketiga dapat digunakan untuk mengubah dokumen XML.

XSLT4R perlu operasi XMLScan, termasuk XSLT4R arsip, yang merupakan Ruby modul 100%. modul-modul ini dapat menggunakan metode instalasi Ruby standar (yaitu Ruby install.rb) instalasi.

sintaks XSLT4R adalah sebagai berikut:

ruby xslt.rb stylesheet.xsl document.xml [arguments]

Jika Anda ingin menggunakan XSLT4R dalam aplikasi Anda, Anda dapat memperkenalkan parameter XSLT dan masukan yang Anda butuhkan. Contohnya adalah sebagai berikut:

require "xslt"

stylesheet = File.readlines("stylesheet.xsl").to_s
xml_doc = File.readlines("document.xml").to_s
arguments = { 'image_dir' => '/idid' }

sheet = XSLT::Stylesheet.new( stylesheet, arguments )

# output to StdOut
sheet.apply( xml_doc )

# output to 'str'
str = ""
sheet.output = [ str ]
sheet.apply( xml_doc )

informasi lebih lanjut

Ruby XML, XSLT dan XPath
10/30