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. 基于 Generator 和 Iterator 的惰性列表

    初识 Lazy List 如果有了解过 Haskell 的朋友,对下面的这些表达一定不陌生 repeat 1 -- => [1, 1, 1, 1, 1,...] cycle "abc& ...

  2. vue2.0:子组件调用父组件

    main.js文件添加如下: new Vue({ router, render: h => h(App), data: { eventHub: new Vue() }}).$mount('#ap ...

  3. Fakeapp 入门教程(3):参数篇

    参数可以让软件自由度更高.Fakeapp的参数并不算多,但是也非常使用.本文就讲解下几个重要的参数.参数设置界面可以通过点击SETTINGS打开. 参数修改无需点击保存,一旦修改直接生效. Proce ...

  4. 解决Linux使用php命令 -base comment not found并安装composer

    获取php的安装目录 使用 find / -name php.ini 查看php的安装位置 /usr/local/php/lib/php.ini # cd 到/usr/local/php/lib/ph ...

  5. Thinkphp 支付宝插件的引入 和调用

    本文版权归本宝宝所有 未得允许不得转载 下载地址传送门 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.twLYka&am ...

  6. 分布式存储系统可靠性系列五:副本放置算法 & CopySet Replication

    本文来自网易云社区 作者:孙建良 在分布式存储系统 中说明了,在一定情况下,copyset的数量不是越多越好,在恢复时间确定的情况下,找到合适的copyset的数量可以降低数据丢失的概率. 在分布式存 ...

  7. Windows下Redis3.2.10及图像化工具redis-desktop-manager安装教程

    1.下载地址: GitHub地址:https://github-production-release-asset-2e65be.s3.amazonaws.com/3402186/bb1d10fc-3f ...

  8. php字符串 函数

    strtolower()//字符串转化小写的字母 $str="abcdEfG";$s=strtolower($str); 输出:abcdefg; strtoupper();字符串转 ...

  9. 更改 Mac 上的功能键行为

    您可以将 Apple 键盘上的顶行按键用作标准功能键,或用来控制 Mac 的内建功能.   如果您的 Apple 键盘部分顶行按键上印有图标,则这些按键可用于执行每个图标所示的特殊功能.这些按键也可用 ...

  10. Leetcode 640.求解方程

    求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回"No so ...