Ruby中使用Nokogiri包来操作XML格式数据的教程
先说安装,这是入门的第一步。以Ubuntu为例,得先装好libxml2和libxslt,这是基础环境: $ apt-get install libxml2 libxslt 装完这两个之后,就顺畅了: $ gem install nokogiri 搞定。 可选项 Nokogiri还提供了一些解析时的可
先说安装,这是入门的第一步。以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::HTML 和 Nokogiri::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/"))
是不是很简单?
寻找节点
节点搜索有两种主流方式: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的结构操作变得相当灵活。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















