婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

什么是 XML ?

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

可擴展標記語言,標準通用標記語言的子集,一種用于標記電子文件使其具有結構性的標記語言。

它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 它非常適合萬維網傳輸,提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據。

XML解析器結構和API

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

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

Ruby 中解析及創建 XML

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

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

在Ruby1.8版本及其以后,RUBY標準庫中將包含REXML。

REXML庫的路徑是: rexml/document

所有的方法和類都被封裝到一個REXML模塊內。

REXML解析器比其他的解析器有以下優點:

  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 數據,首先我們先引入 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"]
 
# 以下將輸出電影標題
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:

SAX 解析器

處理相同的數據文件: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 和 Ruby

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

XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基于XML的樹狀結構,提供在數據結構樹中找尋節點的能力。

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 }
 
# 獲取所有電影格式的類型,返回數組
names = XPath.match(xmldoc, "http://format").map {|x| x.text }
p names

以上實例輸出結果為:

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操作系統編寫的,需要以下庫:

  1.     Sablot
  2.     Iconv
  3.     Expat

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

XSLT4R需要XMLScan操作,包含了 XSLT4R 歸檔,它是一個100%的Ruby的模塊。這些模塊可以使用標準的Ruby安裝方法(即Ruby 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 )

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

標簽:大慶 克拉瑪依 內江 河池 南昌 甘孜 棗莊 西雙版納

巨人網絡通訊聲明:本文標題《在Ruby中處理XML和XSLT以及XPath的簡單教程》,本文關鍵詞  在,Ruby,中,處理,XML,和,XSLT,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在Ruby中處理XML和XSLT以及XPath的簡單教程》相關的同類信息!
  • 本頁收集關于在Ruby中處理XML和XSLT以及XPath的簡單教程的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩美女一区二区三区| 欧美精品一区二区三区蜜臀 | 欧美激情一区二区三区蜜桃视频| 成人午夜在线视频| 亚洲a一区二区| 欧美激情中文字幕| 日韩欧美在线影院| 日本韩国一区二区三区视频| 精品一区二区免费看| 亚洲国产综合人成综合网站| 久久久久久久久99精品| 5月丁香婷婷综合| 91女厕偷拍女厕偷拍高清| 免费三级欧美电影| 亚洲一区二区高清| 亚洲欧洲美洲综合色网| 日韩一级黄色片| 欧美日韩一级片在线观看| 福利视频网站一区二区三区| 久久成人麻豆午夜电影| 亚洲一区二区三区四区五区黄| 国产精品夫妻自拍| 国产亚洲成年网址在线观看| 欧美一级xxx| 欧美亚洲精品一区| 91蝌蚪porny九色| 成人精品在线视频观看| 久久激五月天综合精品| 首页国产丝袜综合| 亚洲一区二区三区自拍| 亚洲人成网站色在线观看| 欧美国产97人人爽人人喊| 国产性做久久久久久| 久久久国产精品麻豆| 日韩精品一区二区在线观看| 日韩欧美一区二区在线视频| 欧美精品久久久久久久多人混战 | 色哟哟欧美精品| 国产成人一级电影| 久久精品噜噜噜成人av农村| 日产国产欧美视频一区精品| 午夜精品久久久久久久久| 亚洲一区二区三区四区中文字幕| 亚洲免费在线电影| 一区二区三区.www| 亚洲一区二区四区蜜桃| 亚洲激情男女视频| 亚洲成人中文在线| 日本伊人精品一区二区三区观看方式| 亚洲一区二区在线免费看| 亚洲国产日日夜夜| 日韩vs国产vs欧美| 久久99精品久久久久婷婷| 蜜桃av一区二区三区| 国内精品写真在线观看| 高清在线观看日韩| 99re这里都是精品| 在线观看一区日韩| 欧美放荡的少妇| 日韩免费一区二区| 国产欧美日韩另类一区| 国产精品亲子乱子伦xxxx裸| 亚洲最大的成人av| 另类小说欧美激情| 国产成a人无v码亚洲福利| 91在线国产观看| 欧美男同性恋视频网站| 精品国产乱码久久久久久影片| 久久久一区二区| 中文字幕一区二区三| 午夜欧美一区二区三区在线播放| 青娱乐精品视频在线| 韩国精品免费视频| 97精品视频在线观看自产线路二| 欧美图区在线视频| 久久五月婷婷丁香社区| 亚洲乱码国产乱码精品精小说 | 亚洲欧美日韩国产一区二区三区| 亚洲一二三四久久| 国内一区二区视频| 99久久婷婷国产综合精品电影 | 一本在线高清不卡dvd| 欧美精品一卡二卡| 国产亚洲一区二区三区四区 | 成人免费毛片aaaaa**| 欧美在线观看一区二区| 久久嫩草精品久久久久| 一区二区三国产精华液| 精品夜夜嗨av一区二区三区| 色婷婷国产精品| 欧美va在线播放| 亚洲狼人国产精品| 国产一区二区三区日韩| 欧美在线制服丝袜| 亚洲国产精品高清| 日韩福利电影在线| 97成人超碰视| 亚洲精品一线二线三线无人区| 亚洲欧美日韩国产另类专区| 激情文学综合丁香| 欧美在线免费观看亚洲| 国产日韩精品一区二区三区在线| 日欧美一区二区| 91小宝寻花一区二区三区| 精品久久国产字幕高潮| 亚欧色一区w666天堂| 99精品久久99久久久久| 26uuu久久天堂性欧美| 日韩电影在线一区二区三区| 99re热视频精品| 久久嫩草精品久久久精品| 亚洲高清视频的网址| 成人国产精品免费网站| 日韩欧美另类在线| 午夜在线电影亚洲一区| 色偷偷成人一区二区三区91| 精品国内片67194| 亚洲图片欧美综合| 欧美在线观看18| 亚洲色图制服诱惑| 成人国产一区二区三区精品| 久久精品一区二区三区不卡 | 国产精品久久国产精麻豆99网站| 精品在线一区二区| 日韩午夜在线观看| 欧美aaa在线| 日韩区在线观看| 男人操女人的视频在线观看欧美| 欧美三级一区二区| 一二三四区精品视频| 色久优优欧美色久优优| 亚洲精品日日夜夜| 色妞www精品视频| 一区二区三区毛片| 欧美最猛黑人xxxxx猛交| 亚洲精品乱码久久久久久黑人 | 午夜一区二区三区在线观看| 在线观看91精品国产入口| 伊人夜夜躁av伊人久久| 在线亚洲高清视频| 亚洲精品国久久99热| 欧美色电影在线| 五月天一区二区三区| 欧美一级国产精品| 国产在线视频一区二区三区| 久久精品在线免费观看| 成人白浆超碰人人人人| 亚洲图片你懂的| 日本精品免费观看高清观看| 亚洲国产日产av| 欧美精品久久久久久久多人混战 | 国产亚洲精品精华液| 99久久夜色精品国产网站| 一级女性全黄久久生活片免费| 欧美日韩三级在线| 精品一区二区三区在线视频| 国产亚洲va综合人人澡精品| 91天堂素人约啪| 亚洲动漫第一页| 欧美一区二区精品| 国产精品亚洲人在线观看| 国产精品不卡在线观看| 91国偷自产一区二区三区成为亚洲经典 | 国产拍揄自揄精品视频麻豆| 成人国产一区二区三区精品| 亚洲高清免费视频| 久久奇米777| 91网站视频在线观看| 热久久一区二区| 国产女人aaa级久久久级| 91视频一区二区三区| 毛片一区二区三区| 中文字幕亚洲电影| 7777精品伊人久久久大香线蕉 | 午夜精品久久久久久不卡8050| 日韩欧美国产系列| 99久久国产综合色|国产精品| 日韩制服丝袜av| 国产精品乱码人人做人人爱| 欧美裸体一区二区三区| 国产aⅴ精品一区二区三区色成熟| 一区二区成人在线| 久久免费偷拍视频| 欧美日韩精品二区第二页| 国产成人av电影在线播放| 夜夜嗨av一区二区三区网页| 国产午夜精品在线观看| 欧美三级三级三级| 波波电影院一区二区三区| 久久精品国产精品亚洲红杏| 亚洲女同女同女同女同女同69| 欧美xxxx在线观看| 欧美在线小视频| 不卡欧美aaaaa| 国产一区三区三区| 日韩高清不卡在线| 夜夜嗨av一区二区三区四季av| 国产亚洲一区二区三区| 日韩三级免费观看| 欧美系列在线观看|