Я предполагаю, что это не возможно полностью автоматическим способом начиная с типа, и структура входа отличается много между функциями.
Дело не только в тебе. Предполагается, что то, что вы делаете, будет правильным способом, но мне это никогда не удавалось. Насколько я могу судить, между Nokogiri и libxml есть некоторая разобщенность, из-за которой он не загружает SYSTEM
DTD или распознает PUBLIC
DTD. Он будет работать, если вы определите DTD в файле XML, но удачи в этом с 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) # => []