[翻译][Ruby教程]Nokogiri - 解析HTML/XML文档 / Parsing an HTML/XML Document

Posted X.u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[翻译][Ruby教程]Nokogiri - 解析HTML/XML文档 / Parsing an HTML/XML Document相关的知识,希望对你有一定的参考价值。

  1. From a String

  2. From a File
  3. From the Internet
  4. Parse Options
  5. Encoding

原文: Parsing an HTML/XML Document

解析html/XML文档

从字符串读取

We’ve tried to make this easy on you. Really! We’re here to make your life easier.

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

变量 html_doc 与 xml_doc 是Nokogiri 对象1, 具有各种属性与方法, 具体见此. 这些具体内容会在其他章节讲述. 

 

*1  原文为documents, 在此译为"对象"

从文件读取

无需读取文件到字符串. Nokogiri会进行这项工作.

1 doc = File.open("blossom.xml") { |f| Nokogiri::XML(f) }

从网络读取

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

解析选项(Parse Options)

Nokogiri提供了一些影响解析方式的选项. 详见: read about them here, 以下是最常用的选项:

  • NOBLANKS - Remove blank nodes
  • NOENT - Substitute entities
  • NOERROR - Suppress error reports
  • STRICT - Strict parsing; raise an error when parsing malformed documents
  • NONET - Prevent any network connections during parsing. Recommended for parsing untrusted documents.

用法:

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

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

编码

在程序内部, 字符串正常是以UTF-8编码储存. 返回文本值的方法将会返回UTF-8字符串. 返回XML的方法(例如to_xml, to_html, inner_html)会返回与源文件相同编码方式的字符串.

注意 / WARNING

某些文档声明了特定的编码方式, 但实际是用的却是另外一种. 这种情况下解析器会使用哪一种编码?

所谓的数据仅仅是由一个一个的字节组成的长串. 我们人为地为它附加了含义. 同样的一组字节在不同的编码下代表着一些互不相同的字符, 因此100%准确地推断出编码是不可能的. 即使做的相当好的libxml2库也不能总是成功地推断出编码.

让Nokogiri使用正确的编码方式来处理文档的最好方式就是显示设定编码. 以下为示例:

1 doc = Nokogiri.XML(<foo><bar /><foo>, nil, EUC-JP)

 


由于译者水平有限, 译文中也许有疏漏与不妥之处, 欢迎在评论区指正。

以上是关于[翻译][Ruby教程]Nokogiri - 解析HTML/XML文档 / Parsing an HTML/XML Document的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nokogiri xpath 解析时未插入 Ruby 环境变量

如何使用 Nokogiri 在 TMX 中搜索道具元素

Nokogiri:解析和更新 Plist 中的值

如何使用 Nokogiri 解析 HTML 表格?

ruby 使用Nokogiri的简单Ruby刮刀

LoadError:库版本不兼容 - /home/ubuntu/.rvm/gems/ruby-2.3.1@lm5/gems/nokogiri-1.8.2/lib/nokogiri/nokogiri.s