ruby – 如何使用nokogiri验证XHTML?

前端之家收集整理的这篇文章主要介绍了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)  # => []
原文链接:https://www.f2er.com/ruby/271685.html

猜你在找的Ruby相关文章