加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何使用nokogiri验证XHTML?

发布时间:2020-12-16 19:41:25 所属栏目:百科 来源:网络整理
导读:我发现一些帖子暗示了您可以使用nokogiri宝石验证X HTML与其DTD.虽然我已经设法使用它来成功地解析XHTML(寻找“一个”标签等),但我很难验证文档. 对我而言: doc = Nokogiri::XML(Net::HTTP.get(URI.parse("http://www.w3.org")))puts doc.validate 结果整堆
我发现一些帖子暗示了您可以使用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)  # => []

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读