Latest web development tutorials
×

Ruby หลักสูตร

Ruby หลักสูตร Ruby แนะนำโดยย่อ Ruby สิ่งแวดล้อม Ruby ติดตั้ง Linux Ruby ติดตั้ง Windows Ruby การเข้ารหัสจีน Ruby เลือกบรรทัดคำสั่ง Ruby ตัวแปรสภาพแวดล้อม Ruby ไวยากรณ์ Ruby ชนิดข้อมูล Ruby คลาสและวัตถุ Ruby กรณีระดับ Ruby ตัวแปร Ruby ผู้ประกอบการ Ruby หมายเหตุ Ruby เงื่อนไข Ruby การไหลเวียน Ruby ทาง Ruby กลุ่ม Ruby โมดูล Ruby เชือก Ruby แถว Ruby กัญชา Ruby วันที่และเวลา Ruby ขอบเขต Ruby iterator Ruby input และ output ไฟล์ Ruby File ชั้นเรียนและวิธี Ruby Dir ชั้นเรียนและวิธี Ruby ผิดปกติ

Ruby การสอนที่ทันสมัย

Ruby เชิงวัตถุ Ruby นิพจน์ปกติ Ruby การเข้าถึงฐานข้อมูล - DBI หลักสูตร Ruby MySQL Ruby CGI โครงการ Ruby CGI ทาง Ruby CGI Cookies Ruby CGI Sessions Ruby ส่ง Email SMTP Ruby Socket โครงการ Ruby XML, XSLT, XPath Ruby Web Services Ruby multithreading Ruby JSON Ruby RubyGems

ทับทิม XML, XSLT และ XPath กวดวิชา

XML คืออะไร?

มันหมายถึง Extensible Markup ภาษา XML (Extensible Markup Language)

Extensible Markup ภาษาเป็นส่วนหนึ่งของมาตรฐานทั่วไป Markup Language, วิธีการสำหรับการทำเครื่องหมายเอกสารอิเล็กทรอนิกส์ที่จะมีภาษามาร์กอัปโครงสร้าง

มันสามารถนำมาใช้ในการแท็กข้อมูลการกำหนดชนิดข้อมูลเป็นเทคโนโลยีที่ช่วยให้ผู้ใช้สามารถกำหนดภาษามาร์กอัปต้นฉบับภาษาของตัวเอง มันเหมาะสำหรับการส่งเว็บให้เป็นวิธีการแบบครบวงจรเพื่อการอธิบายและการแลกเปลี่ยนที่เป็นอิสระของโปรแกรมหรือผู้ขายของข้อมูลที่มีโครงสร้าง

สำหรับข้อมูลเพิ่มเติมโปรดดู กวดวิชา XML


parser XML และโครงสร้าง API

XML parser แซ็กโซโฟนและพระส่วนใหญ่จะเป็นสองชนิด

  • parser แซ็กโซโฟนคือการประมวลผลเหตุการณ์ตามที่การสแกนเอกสาร XML ต้องการตั้งแต่ต้นจนจบอีกครั้งในขั้นตอนการสแกนแต่ละครั้งประสบโครงสร้างไวยากรณ์ก็จะเรียกตัวจัดการเหตุการณ์โครงสร้างไวยากรณ์ที่เฉพาะเจาะจงส่งใบสมัคร เหตุการณ์
  • DOM เอกสารการวิเคราะห์รูปแบบวัตถุลำดับชั้นสร้างโครงสร้างไวยากรณ์ของเอกสารที่สร้างต้นไม้ DOM ในหน่วยความจำโหนดต้นไม้ DOM เป็นวัตถุในการระบุเอกสารแยก Wencheng ต้นไม้ DOM ทั้งจะเอกสารในหน่วยความจำ

ทับทิมที่จะแยกและสร้าง XML

RUBY แยกของเอกสาร XML สามารถใช้ห้องสมุด REXML นี้ห้องสมุด

ห้องสมุด REXML เป็นทับทิม Toolkit XML คือการใช้ภาษาทับทิมบริสุทธิ์ทำตามบรรทัดฐาน XML1.0

ใน Ruby1.8 และรุ่นที่ใหม่กว่าห้องสมุดจะมี RUBY REXML

ห้องสมุดเส้นทาง REXML คือ rexml / เอกสาร

วิธีการและการเรียนทั้งหมดจะถูกบรรจุลงในโมดูล REXML

REXML parser มีข้อดีดังต่อไปมากกว่า parsers อื่น ๆ :

  • 100% ที่เขียนโดยทับทิม
  • ที่ใช้บังคับกับแซ็กโซโฟนและ DOM parser
  • มันมีน้ำหนักเบาน้อยกว่า 2,000 สายรหัส
  • ง่ายต่อการเข้าใจวิธีการและการเรียน
  • ตาม Sax2 API และสนับสนุน XPath เต็ม
  • ใช้ติดตั้งทับทิมโดยไม่ต้องมีการติดตั้งแยกต่างหาก

ต่อไปนี้เป็นตัวอย่างของรหัส XML ที่บันทึกเป็น 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

ขอเริ่มต้นที่จะแยกข้อมูล XML แรกที่เราแนะนำห้องสมุด rexml / เอกสารที่เรามักจะสามารถอยู่ในระดับบนสุด namespace REXML แนะนำ:

#!/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 
}

เอาท์พุทตัวอย่างข้างต้นคือ

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 แซ็กโซโฟน

การประมวลผลแฟ้มข้อมูลเดียวกัน movies.xml แซ็กโซโฟนแยกไม่แนะนำให้เป็นไฟล์ขนาดเล็กต่อไปนี้เป็นตัวอย่างง่ายๆ

#!/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[0..40] + (data.length > 40 ? "..." : "")
    puts "  text   :   #{abbrev.inspect}"
  end
end

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

ดังกล่าวข้างต้นส่งออกเป็น:

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 และทับทิม

เราสามารถใช้ XPath เพื่อดู XML, XPath เพื่อหาข้อมูลที่เป็นเอกสารในภาษา XML (ดู: XPath สอน )

XPath เป็นเส้นทาง XML ภาษามันเป็นวิธีการที่ใช้ในการกำหนด XML (ส่วนหนึ่งของมาตรฐานทั่วไป Markup ภาษา) ภาษาของเอกสารส่วนหนึ่งของสถานที่ XPath ตามต้นไม้ XML และมีความสามารถที่จะมองหาในต่อมน้ำโครงสร้างข้อมูลในต้นไม้

ทับทิม XPath XPath สนับสนุนโดยระดับ REXML ซึ่งจะขึ้นอยู่กับการวิเคราะห์ (Document Object Model) ต้นไม้

#!/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

เอาท์พุทตัวอย่างข้างต้นคือ

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

XSLT และทับทิม

ทับทิมมีสอง XSLT parser คำอธิบายสั้น ๆ ได้รับด้านล่าง:

ทับทิม Sablotron

parser นี้ถูกเขียนและดูแลโดยผู้พิพากษา Masayoshi Takahash นี้ถูกเขียนเป็นหลักสำหรับระบบปฏิบัติการลินุกซ์คุณต้องห้องสมุดต่อไปนี้:

  • Sablot
  • iconv
  • ชาวต่างชาติ

คุณสามารถ ทับทิม Sablotron พบห้องสมุดเหล่านี้

XSLT4R

XSLT4R เขียนโดยไมเคิลนอยมันน์ XSLT4R สำหรับการใช้งานคำสั่งการปฏิสัมพันธ์เส้นที่เรียบง่ายของบุคคลที่สามสามารถนำมาใช้ในการแปลงเอกสาร XML

XSLT4R ต้องดำเนินการ XMLScan รวมทั้งเก็บ XSLT4R ซึ่งเป็นโมดูลทับทิม 100% โมดูลเหล่านี้สามารถใช้วิธีการติดตั้งมาตรฐานทับทิม (เช่น install.rb ทับทิม) การติดตั้ง

XSLT4R ไวยากรณ์เป็นดังนี้:

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

หากคุณต้องการที่จะใช้ XSLT4R ในการประยุกต์ใช้ของคุณคุณสามารถแนะนำ XSLT และใส่พารามิเตอร์ที่คุณต้องการ ตัวอย่างมีดังนี้

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 )

ข้อมูลเพิ่มเติม