Latest web development tutorials

روبي XML، XSLT و XPath تعليمي

ما هو XML؟

وهو يشير إلى التوصيف القابلة للتوسيع لغة XML (لغة التوصيف الموسعة).

لغة التوصيف الموسعة، مجموعة فرعية من لغة توصيف النص ستاندرد المعمم، وهي طريقة لوضع علامات على وثيقة إلكترونية لديهم لغة الترميز تنظيما.

ويمكن استخدامه لوضع علامة البيانات، وتحديد أنواع البيانات، هي التكنولوجيا التي تسمح للمستخدمين لتحديد الخاصة بهم لغة مصدر لغة الترميز. وهو مثالي لنقل الويب، وتوفير نهج موحد لوصف وتبادل مستقلة عن التطبيقات أو الموردين من البيانات المهيكلة.

لمزيد من المعلومات، يرجى الاطلاع على XML تعليمي


محلل XML وبنية API

محلل XML SAX ودوم هي أساسا نوعين.

  • محلل ساكس هو معالجة الحدث القائم، يحتاج مسح مستند XML من البداية الى النهاية مرة أخرى، في عملية المسح، في كل مرة تشهد البنية النحوية، فإنه سيتم استدعاء معالج الحدث البنية النحوية معين، ارسال الطلب حدث.
  • DOM وثيقة تحليل نموذج كائن، بناء البنية النحوية الهرمي للوثيقة، ووضع شجرة DOM في الذاكرة عقدة شجرة دوم ككائن لتحديد وتوثيق تحليل ون تشنغ، وشجرة دوم كلها توثق في الذاكرة.

روبي تحليل وخلق XML

روبي إعراب ثائق XML يمكن استخدام هذه المكتبة REXML المكتبة.

مكتبة REXML هي روبي أدوات XML هو استخدام نقية لغة روبي، اتبع المعايير XML1.0.

في Ruby1.8 والإصدارات الأحدث، ومكتبة تحتوي على RUBY REXML.

مكتبة مسار REXML هي: rexml / وثيقة

يتم تعبئتها كل أساليب والطبقات في وحدة نمطية REXML.

محلل REXML والمزايا التالية خلال موزعي أخرى:

  • 100٪ كتبه روبي.
  • تنطبق على ساكس ومحلل DOM.
  • انها خفيفة الوزن، وأقل من خطوط 2000 من التعليمات البرمجية.
  • من السهل أن نفهم أساليب والطبقات.
  • واستنادا API SAX2 والدعم كسباث الكامل.
  • استخدام تركيب روبي، دون الحاجة إلى تثبيتات منفصلة.

وفيما يلي مثال من التعليمات البرمجية 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

دعونا نبدأ تحليل بيانات XML الأولى قدمنا ​​مكتبة rexml / وثيقة، ونحن يمكن أن يكون عادة في المستوى الأعلى 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:

محلل ساكس

معالجة نفس ملف البيانات: movies.xml، فمن غير المستحسن توزيع SAX كملف صغير، وفيما يلي مثال بسيط:

#!/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، كسباث للعثور على معلومات وثيقة باللغة XML (انظر: كسباث دروس ).

كسباث هي لغة مسار XML، بل هو طريقة تستخدم لتحديد XML (مجموعة فرعية من المعيار المعمم لغة توصيف النص) وثيقة اللغة جزء من الموقع. كسباث القائم على شجرة XML، ويوفر القدرة على البحث عنه في العقد بنية البيانات في شجرة.

روبي كسباث كسباث الدعم من قبل فئة REXML، والتي تقوم على شجرة التحليل (طراز كائن المستند).

#!/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، وتعطى وصفا موجزا أدناه:

روبي Sablotron

كتب هذا المحلل والتي تحتفظ بها العدالة ماسايوشي Takahash. هذا هو مكتوب أساسا لنظام التشغيل لينكس، وكنت في حاجة إلى المكتبات التالية:

  • Sablot
  • يكونف
  • المغتربين

يمكنك روبي 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 )

مزيد من المعلومات