主頁 > 知識庫 > Ruby的XML格式數(shù)據(jù)解析庫Nokogiri的使用進階

Ruby的XML格式數(shù)據(jù)解析庫Nokogiri的使用進階

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


一、基礎語法
1.直接以字符串形式獲取nokogiri對象:

html_doc = Nokogiri::HTML("html>body>h1>Mr. Belvedere Fan Club/h1>/body>/html>")
xml_doc = Nokogiri::XML("root>aliens>alien>name>Alf/name>/alien>/aliens>/root>")

這里的html_doc和xml_doc就是nokogiri文件

2.也可以通過文件句柄獲取nokogiri對象:

f = File.open("blossom.xml")
doc = Nokogiri::XML(f)
f.close

3.還可以直接從網(wǎng)站獲取:

require 'open-uri'
doc = Nokogiri::HTML(open("http://www.xxx.com/"))

二、XML文件解析實例
從XML/HTML文件里抓取字段的常用方法:

現(xiàn)在有一個名為shows.xml的文件,內(nèi)容如下:

root>
 sitcoms>
  sitcom>
   name>Married with Children/name>
   characters>
    character>Al Bundy/character>
    character>Bud Bundy/character>
    character>Marcy Darcy/character>
   /characters>
  /sitcom>
  sitcom>
   name>Perfect Strangers/name>
   characters>
    character>Larry Appleton/character>
    character>Balki Bartokomous/character>
   /characters>
  /sitcom>
 /sitcoms>
 dramas>
  drama>
   name>The A-Team/name>
   characters>
    character>John "Hannibal" Smith/character>
    character>Templeton "Face" Peck/character>
    character>"B.A." Baracus/character>
    character>"Howling Mad" Murdock/character>
   /characters>
  /drama>
 /dramas>
/root>

如果想把所有character標簽的內(nèi)容查找出來,可以這樣處理:

@doc = Nokogiri::XML(File.open("shows.xml"))
@doc.xpath("http://character")

xpath和css方法,返回的是一個結點列表,類似于一個數(shù)組,它的內(nèi)容就是從文件中查找出來的符合匹配規(guī)則的結點.

把dramas結點里的character結點列表查出來:

@doc.xpath("http://dramas//character")

更有可讀性的css方法:

characters = @doc.css("sitcoms name")
# => ["name>Married with Children/name>", "name>Perfect Strangers/name>"]

當已知查詢結果唯一時,如果想直接返回這個結果,而不是列表,可以直接使用at_xpath或at_css:

@doc.css("dramas name").first # => "name>The A-Team/name>"
@doc.at_css("dramas name")  # => "name>The A-Team/name>"

三、Namespaces
對于有多個標簽的情況,命名空間就起到非常大的作用了.
例如有這樣一個parts.xml文件:

parts>
 !-- Alice's Auto Parts Store -->
 inventory xmlns="http://alicesautoparts.com/">
  tire>all weather/tire>
  tire>studded/tire>
  tire>extra wide/tire>
 /inventory>

 !-- Bob's Bike Shop -->
 inventory xmlns="http://bobsbikes.com/">
  tire>street/tire>
  tire>mountain/tire>
 /inventory>
/parts>

可以使用唯一的URL作為namespaces,以區(qū)分不同的tires標簽:

@doc = Nokogiri::XML(File.read("parts.xml"))
car_tires = @doc.xpath('//car:tire', 'car' => 'http://alicesautoparts.com/')
bike_tires = @doc.xpath('//bike:tire', 'bike' => 'http://bobsbikes.com/')

為了讓namespace的使用更方便,nokogiri會自動綁定在根結點上找到的合適的任何namespace.
nokogiri會自動關聯(lián)提供的URL,這個慣例可以減少代碼量.
例如有這樣一個atom.xml文件:

feed xmlns="http://www.w3.org/2005/Atom">

 title>Example Feed/title>
 link />
 updated>2003-12-13T18:30:02Z/updated>
 author>
  name>John Doe/name>
 /author>
 id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6/id>

 entry>
  title>Atom-Powered Robots Run Amok/title>
  link />
  id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a/id>
  updated>2003-12-13T18:30:02Z/updated>
  summary>Some text./summary>
 /entry>
/feed>

遵循上面提到的慣例,xmlns已被自動綁定,不用再手動為xmlns賦值:

@doc.xpath('//xmlns:title')
# => ["title>Example Feed/title>", "title>Atom-Powered Robots Run Amok/title>"]

同樣情況,css的用法:

@doc.css('xmlns|title')

并且在使用css方式時,如果namespaces名字是xmlns,那么連這個詞本身都可以忽略掉:

@doc.css('title')


您可能感興趣的文章:
  • 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和XSLT以及XPath的簡單教程

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

巨人網(wǎng)絡通訊聲明:本文標題《Ruby的XML格式數(shù)據(jù)解析庫Nokogiri的使用進階》,本文關鍵詞  Ruby,的,XML,格式,數(shù)據(jù),解析,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby的XML格式數(shù)據(jù)解析庫Nokogiri的使用進階》相關的同類信息!
  • 本頁收集關于Ruby的XML格式數(shù)據(jù)解析庫Nokogiri的使用進階的相關信息資訊供網(wǎng)民參考!
  • 推薦文章