如何使用nokogirivalidationXHTML?
我发现一些post暗示你可以使用nokogiri gemvalidationXHTML对其DTD的影响。 虽然我已成功使用它来成功解析XHTML(寻找’a’标签等),但我正在努力validation文档。
对我来说,这个:
doc = Nokogiri::XML(Net::HTTP.get(URI.parse("http://www.w3.org"))) puts doc.validate
导致整堆:
[ #, #, #, #, #, #<Nokogiri::XML::SyntaxError: No declaration for attribute profile of element head [repeat for every tag in the document.] ]
所以我假设这不是正确的方法。 我似乎无法找到任何好的例子 – 任何人都可以建议我做错了吗?
我在Mac OSX 10.5.8上运行ruby 1.8.6。 Nokogiri告诉我:
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可以做到这一点。
我可以推荐的最好的方法是使用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) # => []
如果DTD嵌入在XML中,它可以正常工作。 因此,如果重组单个文件中的数据是可以的,无论是作为一般做法,还是仅用于临时使用,都可以解决您的问题。
我向Nokogiri项目提出了一个问题:
https://github.com/sparklemotion/nokogiri/issues/440
JRuby Nokigiri的主要作者Yoko Harada说:
“仅供参考。主分支上的纯Java Nokogiri(尚未发布)没有这个问题。”
我提交的问题包含最小示例文件和irb调用的链接以说明问题。
- 基思