ruby – 如何使用nokogiri验证XHTML?

我发现一些帖子暗示了您可以使用nokogiri宝石验证X HTML与其DTD.虽然我已经设法使用它来成功地解析XHTML(寻找“一个标签等),但我很难验证文档.

对我而言:

doc = Nokogiri::XML(Net::HTTP.get(URI.parse("http://www.w3.org")))
puts doc.validate

结果整堆:

[
#<Nokogiri::XML::SyntaxError: No declaration for element html>,#<Nokogiri::XML::SyntaxError: No declaration for attribute xmlns of element html>,#<Nokogiri::XML::SyntaxError: No declaration for attribute lang of element html>,#<Nokogiri::XML::SyntaxError: No declaration for element head>,#<Nokogiri::XML::SyntaxError: No declaration for attribute profile of element head
[repeat for every tag in the document.]
]

所以我假设这不是正确的方法.我似乎找不到任何好的例子 – 任何人都可以建议我做错了什么?

我在Mac OSX 10.5.8上运行红宝石1.8.6.诺基里告诉我:

nokogiri: 1.3.3
warnings: []

libxml: 
  compiled: 2.6.23
  loaded: 2.6.23
  binding: extension

解决方法

这不只是你你在做什么应该是正确的方法,但我从来没有运气.据我所知,在Nokogiri和libxml之间有一些断开连接,导致它不加载SYstem DTD或识别PUBLIC DTD.如果您在XML文件中定义了DTD,那么它将会起作用,但是您可以使用XHTML DTD进行此操作.

我可以推荐的最好的办法是使用schemas for XHTML

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::XML(open('http://www.w3.org'))
xsd = Nokogiri::XML::Schema(open('http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd'))

#this is a true/false validation
xsd.valid?(doc)    # => true

#this gives a listing of errors
xsd.validate(doc)  # => []

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...