3

我正在从 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

据我了解#validateNokogiri::XML::Document只能检查文档中的 DTD。我将如何做到这一点来存档相同的结果?

4

1 回答 1

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

谢谢

于 2013-07-25T17:31:00.733 回答