位置:首页 > Ruby > Ruby使用Nokogiri操作XML数据实用教程

Ruby使用Nokogiri操作XML数据实用教程

时间:2026-08-17  |  作者:冻月看渠  |  阅读:0

安装是入门的第一步。以Ubuntu为例,先装好libxml2和libxslt,这是基础环境:

$ apt-get install libxml2 libxslt

装完这两个之后,再执行:

$ gem install nokogiri

搞定。

可选项

Nokogiri提供了一些解析时的可选项。常用的有以下几个:

  • NOBLANKS —— 删除空节点,让数据更清爽
  • NOENT —— 替代实体,比如把&替换成&
  • NOERROR —— 隐藏错误报告,减少干扰
  • STRICT —— 精确解析,遇到格式异常直接报错,适合严谨场景
  • NONET —— 解析期间禁止任何网络连接,安全第一

配置方式一:块调用

具体怎么用?先看第一种方式,通过块调用来配置:

doc = Nokogiri::XML(File.open("blossom.xml")) do |config|
  config.strict.nonet
end

配置方式二:组合选项

也可以更直接一点,用位运算组合选项:

doc = Nokogiri::XML(File.open("blossom.xml")) do |config|
  config.options = Nokogiri::XML::ParseOptions::STRICT | Nokogiri::XML::ParseOptions::NONET
end

解析

Nokogiri主要依靠两个核心方法完成解析:Nokogiri::HTMLNokogiri::XML

数据来源可以是字符串、文件或者URL,用法很灵活。

读取字符串

html_doc = Nokogiri::HTML("

Mr. Belvedere Fan Club

") xml_doc = Nokogiri::XML("Alf")

读取文件

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

读取URL

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

无论是字符串、文件还是URL,处理方式都很直接。

寻找节点

节点搜索有两种主流方式:XPath 和 CSS选择器。

假设我们有这样一个XML:


  
    Stars
  
  
    Moon
  

用XPath

@doc.xpath("//title")

用CSS

@doc.css("book title")

两种方式都能精准定位节点,选顺手的那套就行。

修改节点内容

查找节点之后,就可以直接修改内容。

title = @doc.css("book title").first
title.content = 'new title'
puts @doc.to_html

# =>
...
new title
...

直接给 content 赋值即可,操作很直接。

修改节点的结构

除了改内容,Nokogiri也很擅长处理节点结构。

first_title = @doc.at_css('title')
second_book = @doc.css('book').last

# 把第一个title放到第二个book中
first_title.parent = second_book

# 也可以随意摆放
second_book.add_next_sibling(first_title)

# 修改标签名称和属性
first_title.name = 'h2'
first_title['class']='red_color'
puts @doc.to_html
# => 

...

# 还可以新建一个节点 third_book = Nokogiri::XML::Node.new 'book', @doc third_book.content = 'I am the third book' second_book.add_next_sibling third_book puts @doc.to_html # => ... ... I am the third book

这些操作包括:

  • 移动节点
  • 调整节点位置
  • 修改标签名称
  • 设置节点属性
  • 新建节点并插入指定位置

从内容修改到结构重组,Nokogiri让XML操作变得相当灵活。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多