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

主頁 > 知識庫 > Ruby中XML格式數據處理庫REXML的使用方法指南

Ruby中XML格式數據處理庫REXML的使用方法指南

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

以樹方式使用 REXML
REXML 的目的是 正好夠用。在最大程度上,它能很好地完成任務。 實際上, REXML 支持兩種不同樣式的 XML 處理 ― “樹”和“流”。 第一種樣式是 DOM 所嘗試要做的更簡單的版本;第二種樣式是 SAX 所嘗試要做的更簡單的版本。 讓我們先研究樹樣式。假設我們要提取上一個示例中的同一個地址簿文檔。 下面的示例來自我所創建的經修改的 eval.rb ; 標準 eval.rb (鏈接到 Ruby 教程)可以根據對復雜對象的表達式求值顯示非常長的計算結果 ― 我的 eval.rb 在沒有錯誤發生的情況下不作出反應:
如何使用 REXML 來引用嵌套數據

ruby> require "rexml/document"
ruby> include REXML
ruby> addrbook = (Document.new File.new "address.xml").root
ruby> persons = addrbook.elements.to_a("http://person")
ruby> puts persons[1].elements["address"].attributes["city"]
New York

這個表達式很普通。 .to_a() 方法創建文檔中所有 person> 元素的數組,在其它命名中它可能是有用的。 元素有點象 DOM 節點,但它其實更接近于 XML 本身(而且使用起來也更簡單)。 .to_a() 的參數是 XPath,在這種情況下,可以標識文檔中任何地方的所有 person> 元素。如果我們只需要第一層上的元素,可以使用:
創建匹配元素的數組

ruby> persons = addrbook.elements.to_a("/addressbook/person")

我們甚至可以更直接地將 XPath 用作 .elements 屬性的重載索引。例如:
使用 REXML 來引用嵌套數據的另一種方法

ruby> puts addrbook.elements["http://person[2]/address"].attributes["city"]
New York

請注意,XPath 使用基于 1 的索引,不象 Ruby 和 Python 數組使用基于 0 的索引。換句話說, 它仍是我們正在檢查其所在城市的同一個人。通過查看 REXML 請注意,XPath 使用基于 1 的索引,不象 Ruby 和 Python 數組使用基于 0 的索引。換句話說, 它仍是我們正在檢查其所在城市的同一個人。通過查看
用 REXML 顯示元素的 XML 源代碼

ruby> puts addrbook.elements["http://person[2]/address"]
address city='New York' street='118 St.' number='344' state='NY'/>
ruby> puts addrbook.elements["http://person[2]/contact-info"]
contact-info>
 email address='robb@iro.ibm.com'/>
 home-phone number='03-3987873'/>
/contact-info>

此外,XPath 不必只與一個元素匹配。我們已在定義 persons 數組時看見過,但另一個示例強調了這一點:
將多個元素與 XPath 匹配

ruby> puts addrbook.elements.to_a("http://person/address[@state='CA']")
address city='Sacramento' street='Spruce Rd.' number='99' state='CA'/>
address city='Los Angeles' street='Pine Rd.' number='1234' state='CA'/>

與此相反, .elements 屬性的索引只產生 第一個匹配的元素:
當 XPath 只匹配第一次出現時

ruby> puts addrbook.elements.to_a("http://person/address[@state='CA']")
address city='Sacramento' street='Spruce Rd.' number='99' state='CA'/>
address city='Los Angeles' street='Pine Rd.' number='1234' state='CA'/>

也可以通過 REXML 中的 XPath 類使用 XPath 地址, 它具有諸如 .first() 、 .each() 和 .match() 這樣的方法。
REXML 元素的一個獨特的慣用方法是 .each 迭代器。雖然 Ruby 有一個可對集合進行操作的循環結構 for , 但 Ruby 程序員通常更喜歡使用迭代器方法來將控制傳遞給代碼塊。下面的兩種結構是等價的, 但第二種結構有更為自然的 Ruby 感覺:
通過在 REXML 中匹配 XPath 進行迭代

ruby> for addr in addrbook.elements.to_a("http://address[@state='CA']")
  |  puts addr.attributes["city"]
  | end
Sacramento
Los Angeles
ruby> addrbook.elements.each("http://address[@state='CA']") {
  |  |addr| puts addr.attributes["city"]
  | }
Sacramento
Los Angeles

以流方式使用 REXML
出于“正好夠用”的目的, REXML 的樹方式可能是 Ruby 語言最簡單的方法。 但 REXML 還提供了一種流方式,它象是 SAX 的更輕量級的變體。 正如使用 SAX 一樣, REXML 沒有向應用程序程序員提供來自 XML 文檔的缺省數據結構。 相反,“listener”或“handler”類負責提供響應文檔流中各種事件的一組方法。 以下是常用集合:開始標記、結束標記、遇到的元素文本等等。
雖然流方式遠遠沒有象以樹方式工作那樣容易,但通常它的速度要快很多。 REXML 教程聲稱流方式的速度要快 1500倍。 雖然我沒有嘗試過對它進行基準測試,但我猜想這是一種有限的情況(我的小示例在樹方式中也是瞬間完成的)。 總之,如果速度要緊,那么速度上的差異很可能是顯著的。
讓我們研究一個非常簡單的示例,它所做的事情與上面的“列出加州城市”示例相同。 對它進行擴展以用于復雜的文檔處理相對比較簡單:
REXML 中 XML 文檔的流處理

ruby> require "rexml/document"
ruby> require "rexml/streamlistener"
ruby> include REXML
ruby> class Handler
  |  include StreamListener
  |  def tag_start name, attrs
  |    if name=="address" and attrs.assoc("state")[1]=="CA"
  |     puts attrs.assoc("city")[1]
  |    end
  |  end
  | end
ruby> Document.parse_stream((File.new "address.xml"), Handler.new)
Sacramento
Los Angeles

流處理示例中要注意的一件事情是,標記屬性被作為一組數組傳遞, 它要處理的工作比起散列要稍微多一點(但可能在庫中創建會更快)。

編碼問題
REXML所有文本節點中都是以UTF-8編碼的,所有調用的代碼都要注意這一點,在程序中,傳遞給REXML的字符串必須是經過UTF-8編碼的。

REXML不可能總是正確猜測出你的文本的編碼方式,所以它總是假定為UTF-8編碼。同時,如果你試圖添加其他編碼方式的文本,REXML不會發 出警告。添加者必須保證自己添加的是UTF-8的文本。如果添加標準的ASCII 7位編碼,是沒有關系的。如果使用ISO8859-1文本,必須在添加之前轉換為UTF-8編碼。可以使用text.unpack("C").pack("U")。變更編碼進行輸出,只有Document.write()和Document.to_s() 支持。如果需要輸出特定編碼的節點,必須用Output把輸出對象包裝起來。

e = Element.new "a/>"
e.text = "f\xfcr"  # ISO-8859-1 '??'
o = ''
e.write( Output.new( o, "ISO-8859-1" ) )

可以向Output傳遞任何支持的編碼。

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

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

巨人網絡通訊聲明:本文標題《Ruby中XML格式數據處理庫REXML的使用方法指南》,本文關鍵詞  Ruby,中,XML,格式,數據處理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby中XML格式數據處理庫REXML的使用方法指南》相關的同類信息!
  • 本頁收集關于Ruby中XML格式數據處理庫REXML的使用方法指南的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩一区二区三区在线| 91在线免费看| 国产美女在线精品| 日韩一卡二卡三卡| 亚洲国产精品一区二区www在线| 成人福利在线看| 国产精品亲子伦对白| 国产精品一区二区免费不卡| 国产午夜精品在线观看| 国产成人精品综合在线观看| 久久精品亚洲国产奇米99| 成人高清免费观看| 亚洲欧美另类久久久精品2019| 色呦呦国产精品| 樱花草国产18久久久久| 欧美亚洲日本国产| 免费日韩伦理电影| 久久久不卡影院| 成人高清伦理免费影院在线观看| 中文字幕在线一区二区三区| 色94色欧美sute亚洲线路二| 亚洲国产视频网站| 久久综合色之久久综合| 成人污视频在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 粉嫩av亚洲一区二区图片| 国产精品久久久久久妇女6080| 91老师片黄在线观看| 日韩电影在线一区| 国产精品天美传媒沈樵| 337p亚洲精品色噜噜噜| 国产成人精品三级| 亚洲另类中文字| 欧美成人性福生活免费看| 不卡av免费在线观看| 美女视频免费一区| 亚洲精品久久嫩草网站秘色| 精品国产成人系列| 色婷婷久久99综合精品jk白丝| 六月丁香婷婷色狠狠久久| 亚洲同性同志一二三专区| 精品国产免费一区二区三区香蕉| 色欧美片视频在线观看在线视频| 国产又黄又大久久| 首页国产欧美久久| 亚洲人成精品久久久久| 欧美精品一区二区三区蜜桃视频 | 久久久综合视频| 88在线观看91蜜桃国自产| 91啪亚洲精品| 国产成人亚洲综合色影视| 石原莉奈在线亚洲三区| 亚洲男人的天堂在线观看| 久久精品一区二区三区不卡牛牛| 91精品在线观看入口| 在线区一区二视频| 91色在线porny| 成人免费视频网站在线观看| 久久精品国产久精国产| 午夜久久久久久久久久一区二区| 国产精品久久久久久久久免费相片 | 国产精品乱码人人做人人爱| 欧美videofree性高清杂交| 欧美午夜精品一区二区蜜桃 | 欧美手机在线视频| 欧美性videosxxxxx| 欧美亚洲禁片免费| 欧美精品亚洲二区| 欧美精品在线一区二区| 欧美猛男gaygay网站| 欧美日韩亚洲综合在线 | 成人网男人的天堂| 成人高清视频在线| 一本久道久久综合中文字幕 | 高清国产一区二区| 国产精品一区在线观看乱码| 韩国v欧美v日本v亚洲v| 黑人巨大精品欧美一区| 从欧美一区二区三区| 成人丝袜视频网| www.久久久久久久久| 91视频在线观看| 欧美精品第1页| 久久女同精品一区二区| 亚洲国产精华液网站w| 中文字幕在线不卡一区 | 国产精品卡一卡二| 亚洲最大的成人av| 久久狠狠亚洲综合| 国产成人精品一区二区三区四区| 风间由美性色一区二区三区| 97精品国产97久久久久久久久久久久| 91麻豆swag| 91精品黄色片免费大全| xf在线a精品一区二区视频网站| 久久男人中文字幕资源站| 国产精品日韩成人| 亚洲高清免费观看| 国产在线精品视频| 日本韩国精品在线| 26uuu精品一区二区| 亚洲视频1区2区| 青娱乐精品视频| 99久久99久久久精品齐齐| 欧美日韩免费视频| 国产三级三级三级精品8ⅰ区| 亚洲精品乱码久久久久久久久| 青青草国产成人av片免费| 国产很黄免费观看久久| 欧美中文字幕久久| 国产欧美日韩精品一区| 视频在线观看91| 老司机一区二区| 在线日韩一区二区| 国产日韩欧美综合一区| 亚洲成人激情av| 国产·精品毛片| 日韩欧美一级二级三级久久久| 国产精品久久久久影院亚瑟 | 亚洲国产精品一区二区久久 | 色综合天天综合网天天看片| 欧美一级一区二区| 成人欧美一区二区三区1314 | 亚洲精品免费看| 懂色av中文一区二区三区| 欧美日本在线一区| 自拍偷拍亚洲综合| 国产激情一区二区三区四区| 日韩一区二区三区视频在线观看| 亚洲综合在线第一页| 国产99久久久精品| 精品嫩草影院久久| 性感美女久久精品| 91小视频免费观看| 国产精品福利影院| 国产成人av电影在线观看| 欧美日韩免费电影| 一区二区日韩av| 欧美色国产精品| 亚洲资源在线观看| 91在线视频官网| 亚洲人精品午夜| 91啪亚洲精品| 亚洲视频在线一区二区| 成人开心网精品视频| 国产欧美一区二区精品秋霞影院| 国产在线精品视频| 日本一区二区视频在线观看| 黑人巨大精品欧美黑白配亚洲| 欧美一级片在线观看| 日本va欧美va精品发布| 欧美一区二区三区喷汁尤物| 日韩国产一二三区| 91精品国产免费久久综合| 激情五月播播久久久精品| 精品不卡在线视频| 国产69精品久久777的优势| 国产精品美日韩| 91蝌蚪porny| 亚洲成人先锋电影| 欧美一区二区三区在线观看| 激情五月激情综合网| 国产欧美中文在线| www.av精品| 亚洲国产一区在线观看| 555www色欧美视频| 国产曰批免费观看久久久| 国产精品入口麻豆九色| 欧美影院精品一区| 国产一区二区调教| 国产精品国产三级国产| 欧美日韩国产a| 老司机精品视频导航| 亚洲国产精品成人久久综合一区| 色哟哟一区二区在线观看| 日本亚洲最大的色成网站www| www久久精品| 在线亚洲精品福利网址导航| 免费人成在线不卡| 亚洲欧美一区二区在线观看| 欧美日韩精品电影| 国产成人午夜精品5599| 一级日本不卡的影视| 精品理论电影在线| 欧美日本在线看| 国产成人aaa| 五月婷婷另类国产| 亚洲国产高清不卡| 日韩一区二区在线观看视频 | 国产一区二区三区美女| 依依成人精品视频| 久久精品人人做人人综合| 欧美在线啊v一区| 国产凹凸在线观看一区二区| 婷婷中文字幕综合| 欧美—级在线免费片| 在线不卡一区二区| 在线观看中文字幕不卡| 菠萝蜜视频在线观看一区| 精品一区二区三区免费视频|