Ruby 使用Nokogiri验证DTD字符串

Ruby 使用Nokogiri验证DTD字符串,ruby,nokogiri,libxml2,Ruby,Nokogiri,Libxml2,我正在从LibXML切换到Nokogiri。我的代码中有一个方法来检查xml文档是否与Dtd匹配。Dtd从数据库中读取(作为字符串) 这是irb会话中的一个示例 require 'xml' doc = LibXML::XML::Document.string('<foo bar="baz" />') #=> <?xml version="1.0" encoding="UTF-8"?> dtd = LibXML::XML::Dtd.new('<!ELEMENT

我正在从LibXML切换到Nokogiri。我的代码中有一个方法来检查xml文档是否与Dtd匹配。Dtd从数据库中读取(作为字符串)

这是irb会话中的一个示例

require 'xml'
doc = LibXML::XML::Document.string('<foo bar="baz" />') #=> <?xml version="1.0" encoding="UTF-8"?>
dtd = LibXML::XML::Dtd.new('<!ELEMENT foo EMPTY><!ATTLIST foo bar ID #REQUIRED>') #=> #<LibXML::XML::Dtd:0x000000026f53b8>
doc.validate dtd #=> true
需要“xml”
doc=LibXML::XML::Document.string(“”)#=>
dtd=LibXML::XML::dtd.new(“”)#=>#
doc.validate dtd#=>true

据我所知,
Nokogiri::XML::Document
#validate
,只能检查文档中的DTD。我该如何做才能归档相同的结果?

我认为您需要的是
内部\u子集

require 'nokogiri'
doc = Nokogiri::HTML("<!DOCTYPE html>")
# then you can get the info you want
doc.internal_subset # Nokogiri::XML::DTD

# for example you can get name, system_id, external_id, etc
doc.internal_subset.name
doc.internal_subset.system_id
doc.internal_subset.external_id
需要“nokogiri”
doc=Nokogiri::HTML(“”)
#然后你可以得到你想要的信息
doc.internal_子集#Nokogiri::XML::DTD
#例如,您可以获取名称、系统id、外部id等
doc.internal\u subset.name
doc.internal\u subset.system\u id
doc.internal\u subset.external\u id
这是一份完整的文件


谢谢

我没有使用HTML,因此这对我不起作用。我正在使用
Nokogiri::XML(“”)
创建文档,这就给我留下了
internal\u subset=>nil