【问题标题】:Validating DTD-String with Nokogiri使用 Nokogiri 验证 DTD 字符串
【发布时间】:2013-07-25 14:38:57
【问题描述】:

我正在从 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。我将如何执行此操作来归档相同的结果?

【问题讨论】:

    标签: ruby nokogiri libxml2


    【解决方案1】:

    我想你需要的是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的完整文档。

    谢谢

    【讨论】:

    • 我没有使用 HTML,所以这对我不起作用。我正在使用Nokogiri::XML('&lt;foo bar="baz" /&gt;') 创建文档,这给我留下了internal_subset =&gt; nil
    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2010-12-30
    • 2011-11-17
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多