欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 在Ruby中處理XML和XSLT以及XPath的簡單教程

在Ruby中處理XML和XSLT以及XPath的簡單教程

熱門標(biāo)簽:外呼線路從哪里出來的 柯城手機地圖如何做地圖標(biāo)注 巫師3地圖標(biāo)注魔力之所 漯河電銷 中牟外呼系統(tǒng)違法嗎 征服者企業(yè)地圖標(biāo)注 淮安自動外呼系統(tǒng)供應(yīng)商 天津外呼系統(tǒng)怎么收費 AI電銷機器人 線路

什么是 XML ?

XML 指可擴展標(biāo)記語言(eXtensible Markup Language)。

可擴展標(biāo)記語言,標(biāo)準(zhǔn)通用標(biāo)記語言的子集,一種用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言。

它可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標(biāo)記語言進(jìn)行定義的源語言。 它非常適合萬維網(wǎng)傳輸,提供統(tǒng)一的方法來描述和交換獨立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。

XML解析器結(jié)構(gòu)和API

XML的解析器主要有DOM和SAX兩種。

  1.     SAX解析器是基于事件處理的,需要從頭到尾把XML文檔掃描一遍,在掃描的過程中,每次遇到一個語法結(jié)構(gòu)時,就會調(diào)用這個特定語法結(jié)構(gòu)的事件處理程序,向應(yīng)用程序發(fā)送一個事件。
  2.     DOM是文檔對象模型解析,構(gòu)建文檔的分層語法結(jié)構(gòu),在內(nèi)存中建立DOM樹,DOM樹的節(jié)點以對象的形式來標(biāo)識,文檔解析文成以后,文檔的整個DOM樹都會放在內(nèi)存中。

Ruby 中解析及創(chuàng)建 XML

RUBY中對XML的文檔的解析可以使用這個庫REXML庫。

REXML庫是ruby的一個XML工具包,是使用純Ruby語言編寫的,遵守XML1.0規(guī)范。

在Ruby1.8版本及其以后,RUBY標(biāo)準(zhǔn)庫中將包含REXML。

REXML庫的路徑是: rexml/document

所有的方法和類都被封裝到一個REXML模塊內(nèi)。

REXML解析器比其他的解析器有以下優(yōu)點:

  1.     100% 由 Ruby 編寫。
  2.     可適用于 SAX 和 DOM 解析器。
  3.     它是輕量級的,不到2000行代碼。
  4.     很容易理解的方法和類。
  5.     基于 SAX2 API 和完整的 XPath 支持。
  6.     使用 Ruby 安裝,而無需單獨安裝。

以下為實例的 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 數(shù)據(jù),首先我們先引入 rexml/document 庫,通常我們可以將 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"]
 
# 以下將輸出電影標(biāo)題
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
}

以上實例輸出結(jié)果為:

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:

SAX 解析器

處理相同的數(shù)據(jù)文件: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)

以上輸出結(jié)果為:

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

我們可以使用XPath來查看XML ,XPath 是一門在 XML 文檔中查找信息的語言(查看:XPath 教程)。

XPath即為XML路徑語言,它是一種用來確定XML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點的能力。

Ruby 通過 REXML 的 XPath 類支持 XPath,它是基于樹的分析(文檔對象模型)。

#!/usr/bin/ruby -w
 
require 'rexml/document'
include REXML
 
xmlfile = File.new("movies.xml")
xmldoc = Document.new(xmlfile)
 
# 第一個電影的信息
movie = XPath.first(xmldoc, "http://movie")
p movie
 
# 打印所有電影類型
XPath.each(xmldoc, "http://type") { |e| puts e.text }
 
# 獲取所有電影格式的類型,返回數(shù)組
names = XPath.match(xmldoc, "http://format").map {|x| x.text }
p names

以上實例輸出結(jié)果為:

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

XSLT 和 Ruby

Ruby 中有兩個 XSLT 解析器,以下給出簡要描述:
Ruby-Sablotron

這個解析器是由正義Masayoshi Takahash編寫和維護。這主要是為Linux操作系統(tǒng)編寫的,需要以下庫:

  1.     Sablot
  2.     Iconv
  3.     Expat

你可以在 Ruby-Sablotron 找到這些庫。
XSLT4R
XSLT4R 由 Michael Neumann 編寫。 XSLT4R 用于簡單的命令行交互,可以被第三方應(yīng)用程序用來轉(zhuǎn)換XML文檔。

XSLT4R需要XMLScan操作,包含了 XSLT4R 歸檔,它是一個100%的Ruby的模塊。這些模塊可以使用標(biāo)準(zhǔn)的Ruby安裝方法(即Ruby install.rb)進(jìn)行安裝。

XSLT4R 語法格式如下:

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

如果您想在應(yīng)用程序中使用XSLT4R,您可以引入XSLT及輸入你所需要的參數(shù)。實例如下:

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 )

您可能感興趣的文章:
  • Ruby中使用Nokogiri包來操作XML格式數(shù)據(jù)的教程
  • Ruby中XML格式數(shù)據(jù)處理庫REXML的使用方法指南
  • 實例解析Ruby程序中調(diào)用REXML來解析XML格式數(shù)據(jù)的用法
  • Ruby使用REXML庫來解析xml格式數(shù)據(jù)的方法
  • Ruby程序中創(chuàng)建和解析XML文件的方法
  • Ruby的XML格式數(shù)據(jù)解析庫Nokogiri的使用進(jìn)階

標(biāo)簽:大慶 克拉瑪依 內(nèi)江 河池 南昌 甘孜 棗莊 西雙版納

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在Ruby中處理XML和XSLT以及XPath的簡單教程》,本文關(guān)鍵詞  在,Ruby,中,處理,XML,和,XSLT,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在Ruby中處理XML和XSLT以及XPath的簡單教程》相關(guān)的同類信息!
  • 本頁收集關(guān)于在Ruby中處理XML和XSLT以及XPath的簡單教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    一二三四国产精品| 欧美一区午夜视频在线观看| 久久久国际精品| 蜜桃av一区二区在线观看| 中文字幕人妻熟女在线| 欧美伊人久久久久久午夜久久久久| 中文字幕不卡三区| 国产成人免费高清| 国产午夜精品理论片| 日韩欧美一卡二卡| 中文字幕亚洲一区二区va在线| 国内精品伊人久久久久影院对白| 久久精品国产亚洲AV熟女| 日韩欧美一二三区| 美女一区二区视频| www.黄色在线| 国产亚洲精品中文字幕| 国产精品亚洲午夜一区二区三区 | 秋霞电影网一区二区| 欲求不满的岳中文字幕| 日韩一区国产二区欧美三区| 视频在线观看一区| 男生裸体视频网站| 久久一二三国产| 国产精品一区久久久久| 中国一级片在线观看| 亚洲日本一区二区| 三上悠亚 电影| 欧美一区三区二区| 精品一区二区三区日韩| 网站永久看片免费| 中文字幕日韩欧美一区二区三区| 99re视频这里只有精品| 欧美日韩精品一区二区三区四区 | 亚洲高清在线视频| 亚洲调教欧美在线| 久久久午夜电影| 成人免费福利片| 欧美日韩色一区| 日本中文字幕不卡| 久久精品三级视频| 亚洲欧美自拍偷拍色图| 女同性αv亚洲女同志| 精品国产伦一区二区三区免费| 国产麻豆精品久久一二三| 午夜激情福利电影| 亚洲精选视频在线| 三级男人添奶爽爽爽视频| 久久久青草青青国产亚洲免观| 成人aaaa免费全部观看| 在线不卡一区二区| 国产精品夜夜嗨| 欧美日韩一区二区三区四区五区| 麻豆成人免费电影| 91porn在线视频| 秋霞电影一区二区| 国产精品老熟女一区二区| 91网站黄www| 欧美一区中文字幕| 成人午夜激情影院| 91精品免费在线观看| 国产成人综合自拍| 欧美日本国产一区| 国产乱理伦片在线观看夜一区| 色吧成人激情小说| 久久99久久久久| 欧美在线观看视频一区二区| 免费一级片91| 日本高清成人免费播放| 蜜桃av噜噜一区| 91国产福利在线| 国精产品一区一区三区mba视频 | 韩国精品主播一区二区在线观看| 色综合久久久久| 青青国产91久久久久久| 色狠狠色噜噜噜综合网| 麻豆精品蜜桃视频网站| 欧美这里有精品| 国产中文一区二区三区| 欧美日韩电影一区| 国产91在线观看| 日韩免费福利电影在线观看| 99久久精品国产观看| 久久免费的精品国产v∧| 国产成人av片| 亚洲日本乱码在线观看| 精品视频第一页| 日韩主播视频在线| 色哟哟国产精品免费观看| 久久成人18免费观看| 欧美日本一区二区三区四区| 成人精品国产福利| 久久久久一区二区三区四区| 日韩成人av一区二区| 亚洲精品菠萝久久久久久久| 情侣偷拍对白清晰饥渴难耐| 蜜桃久久精品一区二区| 欧美日韩二区三区| 91色视频在线| 国产精品伦理一区二区| 九九九视频在线观看| 美女www一区二区| 在线成人免费观看| 中文在线字幕观看| 亚洲精品乱码久久久久久日本蜜臀| 国产精品情侣呻吟对白视频| 日韩国产在线一| 欧美精品一二三| 91女厕偷拍女厕偷拍高清| 国产精品久久久99| 性爱在线免费视频| 精品一区二区三区在线播放| 日韩精品中文字幕在线一区| 欧亚乱熟女一区二区在线| 亚洲一区二区三区影院| 在线影院国内精品| av一区二区不卡| 国产精品久久久99| av成人免费网站| 成人中文字幕电影| 国产精品久久午夜夜伦鲁鲁| 中文字幕求饶的少妇| 国产成人超碰人人澡人人澡| 国产香蕉久久精品综合网| 1024手机在线观看你懂的| 国内外成人在线视频| 久久精品亚洲一区二区三区浴池| 亚洲精品国产熟女久久久| 另类小说色综合网站| 亚洲精品一区二区三区福利 | 国产福利不卡视频| 欧美激情一区在线观看| 欧美a级片免费看| 成人综合在线网站| 亚洲欧美另类久久久精品2019| 色综合天天性综合| 91视视频在线观看入口直接观看www | 久久久久久久久久看片| 欧美老女人性生活视频| 国产美女精品人人做人人爽| 欧美激情一区在线| 全程偷拍露脸中年夫妇| 99国产欧美另类久久久精品| 玉米视频成人免费看| 欧美日韩中文国产| 中文字幕精品久久久| 免费成人美女在线观看| 久久久午夜电影| 亚洲国产美女视频| 欧美熟妇精品一区二区| 全部av―极品视觉盛宴亚洲| 2022国产精品视频| 成人高潮免费视频| 99国产欧美另类久久久精品| 亚洲高清视频的网址| 日韩精品一区二区三区中文不卡| 黄色av免费播放| av在线这里只有精品| 亚洲成av人在线观看| 欧美不卡一区二区| 久草手机视频在线观看| 91免费观看视频| 日本免费新一区视频| 国产日本一区二区| 日本高清不卡视频| 国产伦精品一区二区三区精品| 另类小说视频一区二区| 国产精品久久久久aaaa樱花| 欧美日本在线观看| 山东少妇露脸刺激对白在线| 91麻豆精品国产91久久久资源速度 | 古装做爰无遮挡三级聊斋艳谭| 丝袜脚交一区二区| 久久精品一二三| 欧美在线高清视频| 熟女高潮一区二区三区| 99热这里都是精品| 青青草国产精品亚洲专区无| 国产精品人成在线观看免费| 欧美日韩免费视频| 国产精品综合激情| 亚洲熟妇一区二区| 麻豆精品在线视频| 一区二区免费在线| 久久午夜国产精品| 欧美午夜不卡在线观看免费| 高潮毛片无遮挡| 99精品热视频| 国产专区欧美精品| 国产美女久久久久久| 亚洲欧洲国产视频| 国产高清精品久久久久| 日韩高清一级片| 亚洲人一二三区| 久久蜜桃一区二区| 欧美日本在线一区| 国产高清在线免费观看| 一级片手机在线观看| 欧美性猛交乱大交| 国产成人在线观看免费网站|