使用Nokogiri验证DTD-String

时间:2013-07-25 15:34:16

标签: 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 foo EMPTY><!ATTLIST foo bar ID #REQUIRED>') #=> #<LibXML::XML::Dtd:0x000000026f53b8>
doc.validate dtd #=> true

据我了解#validate的{​​{1}},只能检查文档中的DTD。我该怎么做才能存档相同的结果?

1 个答案:

答案 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的完整文档。

由于