我正在从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
据我了解#validate
的{{1}},只能检查文档中的DTD。我该怎么做才能存档相同的结果?
答案 0 :(得分:0)
我认为你需要的是internal_subset
:
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::XML::DTD的完整文档。
由于