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

主頁 > 知識庫 > 實例解析Ruby程序中調用REXML來解析XML格式數據的用法

實例解析Ruby程序中調用REXML來解析XML格式數據的用法

熱門標簽:買了外呼系統不想用了怎么辦 樂昌電話機器人 開封百應電銷機器人聯系方式 武漢呼叫中心外呼系統線路商 邯鄲外呼調研線路 電話機器人電話卡封號怎么辦 北京語音電銷機器人價格 浦東上海400開頭的電話申請 真人語音電銷機器人系統

REXML 是由 Sean Russell 編寫的庫。它不是 Ruby 的唯一 XML 庫,但它是很受歡迎的一個,并且是用純 Ruby 編寫( NQXML 也是用 Ruby 編寫的, 但 XMLParser 封裝了用 C 編寫的 Jade 庫)。 在他的 REXML 概述中,Russell 評論道:
我有這樣的問題:我不喜歡令人困惑的 API。有幾種用于 Java 實現的 XML 解析器 API。其中大多數都遵循 DOM 或 SAX,并且在基本原理上與不斷出現的眾多 Java API 非常相似。也就是說,它們看 上去象是由從未使用過他們自己的 API 的理論家設計出來的。 通常,現有的 XML API 都很令人討厭。他們采用一種被明確設計成非常簡單、一流且功能強大的標記語言, 然后用討厭的、過多的和大型 API 對它進行封裝。甚至是為了進行最基本的 XML 樹操作,我總是不得不參考 API 文檔; 沒有任何東西是憑直覺的,而且幾乎每個操作都很復雜。
雖然我并不認為它有多么令人心煩,但我同意 Russell 的觀點:XML API 對于大多數使用它們的人來說無疑帶來了過多的工作量。

示例
看下面的book.xml:

引用

library shelf="Recent Acquisitions"> 
 section name="Ruby"> 
  book isbn="0672328844"> 
  title>The Ruby Way/title> 
  author>Hal Fulton/author> 
  description> 
   Second edition. The book you are now reading. 
   Ain't recursion grand? 
  /description> 
  /book> 
 /section> 
 section name="Space"> 
  book isbn="0684835509"> 
   title>The Case for Mars/title> 
   author>Robert Zubrin/author> 
   description>Pushing toward a second home for the human 
    race. 
   /description> 
  /book> 
  book isbn="074325631X"> 
   title>First Man: The Life of Neil A. Armstrong/title> 
   author>James R. Hansen/author> 
   description>Definitive biography of the first man on 
    the moon. 
   /description> 
  /book> 
 /section> 
/library>

1 Tree Parsing(也就是DOM-like)

我們需要require rexml/document 庫,并且include REXML :

require 'rexml/document' 
include REXML 
 
input = File.new("books.xml") 
doc = Document.new(input) 
 
root = doc.root 
puts root.attributes["shelf"]  # Recent Acquisitions 
 
doc.elements.each("library/section") { |e| puts e.attributes["name"] } 
# Output: 
# Ruby 
# Space 
 
doc.elements.each("*/section/book") { |e| puts e.attributes["isbn"] } 
# Output: 
# 0672328844 
# 0321445619 
# 0684835509 
# 074325631X 
 
sec2 = root.elements[2] 
author = sec2.elements[1].elements["author"].text  # Robert Zubrin 

這里要注意的是xml中的屬性和值被表示為一個hash,因此我們能夠通過attributes[]來提取我們需要的值,元素的值還能通過類似于path的字符串或者整數來取得.其中用整數取的話,是1-based而不是0-based.

2  Stream Parsing(也就是SAX-like Parsing)

這邊使用了一個小技巧,那就是定義了一個listener 類,它將會在parse的時候被回調:

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 
source = File.new "books.xml" 
Document.parse_stream(source, list) 


這里介紹一下StreamListener 模塊,這個模塊它提供了幾個空的回調方法,因此你可以為了實現你自己的功能而覆蓋它.當parser 進入一個tag時,就會調用tag_start方法.而text方法也是類似的,他只不過是當讀取到數據時會被回調,它的輸出是這樣的:

tag_start: "library", {"shelf"=>"Recent Acquisitions"} 
tag_start: "section", {"name"=>"Ruby"} 
tag_start: "book", {"isbn"=>"0672328844"} 
tag_start: "title", {} 
text : "The Ruby Way" 


3 XPath

REXML通過XPath 類來提供Xpath的支持. 它也同時支持DOM-like和SAX-like .還是前面的那個xml文件,我們使用Xpath可以這樣做:

book1 = XPath.first(doc, "http://book") # Info for first book found 
p book1 
 
# Print out all titles 
XPath.each(doc, "http://title") { |e| puts e.text } 
 
# Get an array of all of the "author" elements in the document. 
names = XPath.match(doc, "http://author").map {|x| x.text } 
p names 

輸出是類似于下面的:

book isbn='0672328844'> ... /> 
The Ruby Way 
The Case for Mars 
First Man: The Life of Neil A. Armstrong 
["Hal Fulton", "Robert Zubrin", "James R. Hansen"] 

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

標簽:松原 宜春 淄博 自貢 鄂州 六安 石嘴山 河北

巨人網絡通訊聲明:本文標題《實例解析Ruby程序中調用REXML來解析XML格式數據的用法》,本文關鍵詞  實例,解析,Ruby,程序,中,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《實例解析Ruby程序中調用REXML來解析XML格式數據的用法》相關的同類信息!
  • 本頁收集關于實例解析Ruby程序中調用REXML來解析XML格式數據的用法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品国产免费久久| 一区二区三区四区av| 5566中文字幕一区二区电影| 久久精品亚洲精品国产欧美| 石原莉奈在线亚洲三区| 91在线观看地址| 久久免费的精品国产v∧| 亚洲亚洲人成综合网络| 91在线无精精品入口| 中文av字幕一区| 福利电影一区二区| 国产亚洲欧美日韩俺去了| 国产一区二区三区久久久 | 天天色图综合网| 欧美亚洲一区二区三区四区| 亚洲精选视频免费看| 色8久久人人97超碰香蕉987| 亚洲成av人影院在线观看网| 日韩一区二区麻豆国产| 成人涩涩免费视频| 性感美女久久精品| 国产偷国产偷精品高清尤物| 99re这里只有精品6| 三级欧美韩日大片在线看| 久久网这里都是精品| 99久久国产综合色|国产精品| 亚洲国产乱码最新视频| 26uuu成人网一区二区三区| av亚洲精华国产精华精华| 蜜桃视频在线一区| 一区二区三区国产精华| 国产婷婷色一区二区三区四区| 91视频免费观看| 成人午夜电影小说| 国产麻豆精品视频| 美女性感视频久久| 亚洲国产美国国产综合一区二区| 欧美国产成人精品| 精品日韩欧美在线| 欧美裸体bbwbbwbbw| 91免费视频网| 欧美三级中文字幕在线观看| youjizz久久| 在线看日韩精品电影| 色综合一区二区三区| 成人美女在线观看| 国产suv一区二区三区88区| 看电视剧不卡顿的网站| 久草在线在线精品观看| 精品一区二区综合| 国产精品一二三| 成人黄动漫网站免费app| 国产米奇在线777精品观看| 国产成人在线视频网址| 国产成人精品亚洲日本在线桃色| aaa亚洲精品一二三区| 欧洲亚洲精品在线| 日韩一区二区三区三四区视频在线观看| 欧美天堂亚洲电影院在线播放| 欧美视频你懂的| 中文字幕不卡一区| 天天综合天天做天天综合| 另类小说色综合网站| 高清视频一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 狠狠色狠狠色综合系列| 国产传媒一区在线| 欧美日韩在线免费视频| 精品人在线二区三区| 一个色综合av| 99久久综合狠狠综合久久| 欧美高清hd18日本| 亚洲综合图片区| 不卡在线观看av| 亚洲国产高清不卡| 国产一区在线视频| 精品日韩一区二区| 麻豆国产91在线播放| 91精品国产91久久久久久一区二区| 最近日韩中文字幕| 国产成人av电影| 日本一区二区三级电影在线观看| 日本中文一区二区三区| 欧美吻胸吃奶大尺度电影| 亚洲午夜精品久久久久久久久| 91国内精品野花午夜精品 | 国产精品成人免费在线| 国产激情视频一区二区三区欧美 | 精品一区二区三区免费观看| 91成人免费在线| 亚洲成人一区二区在线观看| 欧美日韩国产综合一区二区三区| 日韩精彩视频在线观看| 精品福利在线导航| 成人精品亚洲人成在线| 亚洲免费av高清| 欧美老年两性高潮| 国产一区二区网址| 亚洲与欧洲av电影| 欧美成人官网二区| 色悠悠久久综合| 国产麻豆一精品一av一免费| 亚洲免费成人av| 国产日韩精品一区二区三区 | 免费人成黄页网站在线一区二区| 69久久夜色精品国产69蝌蚪网 | 国产欧美一区二区精品性 | 视频在线观看一区| 中文字幕乱码一区二区免费| 暴力调教一区二区三区| 国产高清久久久| 国产在线视频一区二区三区| 亚洲综合在线观看视频| 国产精品天天看| 国产欧美日韩亚州综合| 欧美一区二区福利视频| 欧美日韩国产综合一区二区| 欧美色老头old∨ideo| 精品视频1区2区3区| 在线观看不卡一区| 日韩三级在线观看| 日韩欧美不卡一区| 日韩欧美一区二区不卡| 欧美精品在线一区二区三区| 欧美美女直播网站| 日韩一区二区三区免费看| 精品电影一区二区| 国产精品理论在线观看| 亚洲欧美一区二区在线观看| 亚洲精品午夜久久久| 日日摸夜夜添夜夜添国产精品| 日本不卡在线视频| 国产激情一区二区三区| av不卡在线观看| 日韩精品一区二| 一区二区三区不卡视频在线观看 | 久久综合资源网| 国产欧美视频一区二区| 亚洲一卡二卡三卡四卡无卡久久| 亚洲国产aⅴ成人精品无吗| 日本成人在线不卡视频| 成人激情校园春色| 91麻豆精品国产91久久久| 国产亚洲精品资源在线26u| 亚洲va欧美va天堂v国产综合| 国内精品免费在线观看| 欧美色图在线观看| 最新不卡av在线| www.欧美色图| 久久久激情视频| 天堂一区二区在线免费观看| 国产资源在线一区| 欧洲国产伦久久久久久久| 久久精品日产第一区二区三区高清版| 国产精品电影一区二区三区| 国产一区在线观看麻豆| 7777精品伊人久久久大香线蕉| 综合电影一区二区三区| 久久国产日韩欧美精品| 337p亚洲精品色噜噜狠狠| 亚洲综合免费观看高清在线观看| 91亚洲精品一区二区乱码| 欧美激情中文字幕一区二区| 久久精品国产亚洲一区二区三区| 欧美一区二区在线观看| 亚洲成人先锋电影| 日韩欧美的一区二区| 国产一区二区免费在线| 国产精品沙发午睡系列990531| 成人免费毛片app| 午夜精品在线视频一区| 精品久久久久久久人人人人传媒| 国产永久精品大片wwwapp| 国产网红主播福利一区二区| 91亚洲精品久久久蜜桃| 精品国产一区二区在线观看| 亚洲图片你懂的| 欧美肥胖老妇做爰| 国产精品538一区二区在线| 亚洲人成网站影音先锋播放| 欧美精品日韩精品| 风间由美一区二区av101| 日韩和的一区二区| 中文字幕亚洲精品在线观看| 91精品一区二区三区久久久久久 | 中文字幕中文乱码欧美一区二区| 亚洲欧美一区二区三区极速播放| 国产成人综合亚洲网站| 一区二区三区四区五区视频在线观看| 精品国产乱码久久久久久免费| 色综合久久中文综合久久97| 国产91精品一区二区麻豆亚洲| 午夜国产不卡在线观看视频| 国产精品高清亚洲| 日韩一级免费一区| 欧美肥妇free| 欧美一级理论片| 欧美图片一区二区三区| 欧美日韩精品电影| 国产精品蜜臀av|