ทับทิม 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 สำหรับการใช้งานคำสั่งการปฏิสัมพันธ์เส้นที่เรียบง่ายของบุคคลที่สามสามารถนำมาใช้ในการแปลงเอกสาร XMLXSLT4R ต้องดำเนินการ 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 )
ข้อมูลเพิ่มเติม
- parser REXML สมบูรณ์ดูเอกสาร แยกวิเคราะห์เอกสาร REXML
- คุณสามารถเริ่มต้นด้วย RAA ความรู้ ดาวน์โหลด XSLT4R ใน