StupidBeauty
Read times:2371Posted at: - no title specified

Nokogiri 教程翻译 :解析一个HTML/XML文档,Parsing an HTML/XML Document

内容目录

以字符串作为数据来源

以文件作为数据源

以互联网网址作为数据源

解析选项

字符编码

以字符串作为数据来源

我们尽力让这个过程对妳来说变得简单。真的狠简单!我们希望妳的生命更舒坦。

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文档对象 ,它们具有所有有趣的属性和方法,妳 可以在这里进一步阅读 。我们会在其它章节中说明其它内容。

以文件作为数据源

注意,妳不需要将一个文件读入到一个字符串变量中。Nokogiri会自己做这件事。

f = File .open("blossom.xml")

doc = Nokogiri :: XML(f)

f.close

Nokogiri 狠聪明吧!

以互联网网址作为数据源

我理解,可能会有某些HTML文档是需要从互联网取到的。

require 'open-uri'

doc = Nokogiri :: HTML(open("http://www.threescompany.com/"))

解析选项

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

字符编码

字符串在内部都是以UTF-8编码来储存的。那些返回文本值的方法,一定会以UTF-8编码来储存字符串。那些返回XML的方法(例如to_xmlto_htmlinner_html)呢,会按照源文档的字符编码来对返回的字符串进行编码。

警告

某些文档会声明它们使用了某种编码,而实际上却使用另一种编码。对于这种情况,解析器应当使用哪种编码呢?

记住,数据只是一个字节流而已。只是我们人类向那个字节流上加上了含义。任何一个特定的字节集合,都可能在多种编码中有效,因此,对于编码的检测达到100%的准确率是不可能的。libxml2已经尽其所能,但是它不可能100%正确

如果妳想让Nokogiri正确地处理文档的编码,那么,最好是显式设置编码方式。以下是一个示例,显式地将解析器所使用的编码设置为EUC-JP

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

高阳公主和辩机

未知美人

Your opinions

Your name:Email:Website url:Opinion content: