亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby的XML格式數據解析庫Nokogiri的使用進階

2020-10-29 19:35:41
字體:
來源:轉載
供稿:網友


一、基礎語法
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.還可以直接從網站獲取:

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

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

現在有一個名為shows.xml的文件,內容如下:

<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標簽的內容查找出來,可以這樣處理:

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

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

把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,以區分不同的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會自動關聯提供的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')


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频免费在线观看| 中文字幕一精品亚洲无线一区| 日韩在线视频二区| 日韩中文字幕不卡视频| 亚洲影院色在线观看免费| 91国产中文字幕| 久久久国产成人精品| 亚洲第一区第一页| 美日韩精品免费观看视频| 日韩女优人人人人射在线视频| 91高清视频免费观看| 国产精品流白浆视频| 国产婷婷97碰碰久久人人蜜臀| 成人网址在线观看| 91久久精品日日躁夜夜躁国产| 日韩精品视频在线观看免费| 亚洲国产91色在线| 精品久久香蕉国产线看观看gif| 国产日韩欧美黄色| 欧美日韩亚洲91| 日韩最新在线视频| 人人澡人人澡人人看欧美| 成人激情视频免费在线| 亚洲系列中文字幕| 成人免费淫片视频软件| 一级做a爰片久久毛片美女图片| 久久99精品久久久久久噜噜| 久久99国产精品自在自在app| 国产精品免费一区二区三区都可以| 伊人久久综合97精品| 欧美日韩在线观看视频小说| 亚洲老板91色精品久久| 日韩精品极品视频免费观看| 亚洲一区二区三区在线免费观看| 欧美在线视频a| 欧美国产在线视频| 国产精品观看在线亚洲人成网| 国模视频一区二区三区| 成人免费大片黄在线播放| 国产精品午夜国产小视频| 国产精品美女免费视频| 色先锋资源久久综合5566| 国产91在线播放九色快色| 亚洲免费视频在线观看| 欧美激情视频给我| 久久九九热免费视频| 亚洲国产精品推荐| 久久视频这里只有精品| 亚洲午夜未满十八勿入免费观看全集| 日韩一区视频在线| 亚洲成人精品av| 97在线视频一区| 欧美激情a在线| 成人午夜一级二级三级| 亚洲国产古装精品网站| 精品在线小视频| 国产精品爽黄69| 91久久在线观看| 国产精品永久免费观看| 欧美日韩在线看| 精品亚洲一区二区三区| 国产欧美日韩综合精品| 国产午夜精品久久久| 欧美久久精品一级黑人c片| 高清欧美性猛交xxxx黑人猛交| 成人国产精品久久久| 亚洲成人黄色网址| 国产香蕉一区二区三区在线视频| 成人精品福利视频| 国产精品视频网站| 国产成人在线播放| 日韩中文综合网| 亚洲男女自偷自拍图片另类| 2023亚洲男人天堂| 在线观看日韩www视频免费| 中文字幕欧美专区| 亚洲人精品午夜在线观看| 91精品国产自产在线观看永久| 久久视频在线观看免费| 国产精品久久网| 亚洲国产又黄又爽女人高潮的| 国模私拍一区二区三区| 久久好看免费视频| 久久久久久久久久久免费精品| 久久色在线播放| 国产精品偷伦视频免费观看国产| 97婷婷大伊香蕉精品视频| 亚洲欧美日韩国产中文专区| 97在线视频免费看| www.日韩视频| 北条麻妃一区二区三区中文字幕| 亚洲精品成人免费| 国产精品∨欧美精品v日韩精品| 国产精品久久久久久av下载红粉| 日韩禁在线播放| 久久男人的天堂| 91精品久久久久久久久青青| 成人精品一区二区三区电影黑人| 欧美一级高清免费| 在线看国产精品| 国产视频丨精品|在线观看| 亚洲va欧美va在线观看| 欧美—级a级欧美特级ar全黄| 日韩欧美国产高清91| 亚洲免费视频在线观看| 欧美视频在线观看免费| 欧美成人黑人xx视频免费观看| 91久久久久久久| 亚洲精品国精品久久99热| 久久99久久亚洲国产| 91精品国产自产在线老师啪| 久久99久久亚洲国产| 国产精品久久久久免费a∨| 九九热视频这里只有精品| 国产伦精品一区二区三区精品视频| 日本久久久久久久久久久| 国产精欧美一区二区三区| 91中文字幕在线| 成人疯狂猛交xxx| 欧美韩日一区二区| 国语自产精品视频在线看| 午夜精品久久久久久久久久久久久| 国产精品亚洲精品| 色噜噜狠狠色综合网图区| 国产精品999999| 亚洲国产成人一区| 精品一区二区三区三区| 亚洲аv电影天堂网| 青青久久av北条麻妃海外网| 国产大片精品免费永久看nba| 国产免费久久av| 亚洲精品综合精品自拍| 国产免费成人av| 欧美日韩日本国产| 日韩a**站在线观看| 亚洲精品久久久久久下一站| 亚洲欧美激情在线视频| 欧美日韩视频免费播放| 国产精品一区久久| 曰本色欧美视频在线| 欧美与欧洲交xxxx免费观看| 九九久久久久久久久激情| 日本欧美黄网站| 欧美人成在线视频| 九九精品视频在线观看| 久久久久久12| 国内精品伊人久久| 91av视频在线免费观看| 午夜精品久久久久久久99热| 中文字幕精品在线视频| 亚洲最大福利视频| 3344国产精品免费看| 日韩免费av片在线观看| 久久黄色av网站| 色偷偷888欧美精品久久久| 亚洲欧洲日产国码av系列天堂| 色一区av在线| 国产一区二区三区视频在线观看| 久久精品影视伊人网| 美女扒开尿口让男人操亚洲视频网站| 国产成人+综合亚洲+天堂| 欧美裸体男粗大视频在线观看| 亚洲v日韩v综合v精品v| 欧美国产日韩一区二区在线观看|