1. From a String

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

原文: Parsing an HTML/XML Document

解析HTML/XML文档

从字符串读取

 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 对象1, 具有各种属性与方法, 具体见此. 这些具体内容会在其他章节讲述.

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

从文件读取

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

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

从网络读取

 require 'open-uri'
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.

用法:

 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_xml, to_html, inner_html)会返回与源文件相同编码方式的字符串.

注意 / WARNING

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

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

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

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

[翻译][Nokogiri官方教程] 解析HTML/XML文档 / Parsing an HTML/XML Document的更多相关文章

  1. JAVA读取XML,JAVA读取XML文档,JAVA解析XML文档,JAVA与XML,XML文档解析(Document Object Model, DOM)

    使用Document Object Model, DOM解析XML文档 也可参考我的新浪博客:http://blog.sina.com.cn/s/blog_43ac5543010190w3.html ...

  2. 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子

    首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  3. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  4. java中用jdom创建xml文档/将数据写入XML中

    import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; i ...

  5. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  6. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

  7. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  8. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  9. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

随机推荐

  1. git bush的一些基础命令

    git bush的一些基础命令(不区分大小写) 通过命令创建本地仓库 首先自己需要手动建一个文件夹用于本地仓库 进行如下输入,使用cd跳转到刚刚创建的文件夹中 之后再输入 git init 即可创建 ...

  2. 可怕的万圣节 Linux 命令

    虽然现在不是万圣节,也可以关注一下 Linux 可怕的一面.什么命令可能会显示鬼.巫婆和僵尸的图像?哪个会鼓励"不给糖果就捣蛋"的精神? crypt 好吧,我们一直看到 crypt ...

  3. PHP实现消息推送

    我们做web的时候偶尔会遇到消息推送,如图示例(红框位置) 当我们遇到这种功能要如何开发呢?下边将我了解的两种方法整理一下: 一.ajax轮询,定时去请求服务器数据 通过观察thinkphp官网貌似也 ...

  4. MVP模式与MVVM模式

    1.mvp模式(Model层 Presenter层 View 层) Model层 :数据层(ajax请求) Presenter层:呈现层,view逻辑相关的控制层,控制层可以去调Model去发ajax ...

  5. 使用 Sconfig.cmd 配置服务器核心服务器

    使用 Sconfig.cmd 配置服务器核心服务器 适用对象:Windows Server 2012 R2, Windows Server 2012 在 Windows Server 2012 中,你 ...

  6. 二叉树遍历(Java实现)

    二叉树遍历(Java实现)   主要是二叉树的遍历,包括递归遍历和非递归遍历 import java.util.ArrayDeque; import java.util.ArrayList; impo ...

  7. Python学习之正则表达式初探

    正则表达式 正则表达式 (或 regexes ) 是通用的文本模式匹配的方法. Django URLconfs 允许你 使用任意的正则表达式来做强有力的URL映射,不过通常你实际上可能只需要使用很少的 ...

  8. 【Palindrome Partitioning】cpp

    题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...

  9. 基于web自动化测试框架的设计与开发(本科论文word)

  10. Postgresql 查看建表语句 命令

    pg_dump -U username databasename -W -s -t tablename -s, --schema-only 只转储模式, 不包括数据 -t, --table=TABLE ...