2013-07-25 3 views
3

Я перехожу из LibXML в Nokogiri. У меня есть метод в моем коде, чтобы проверить, соответствует ли xml-документ Dtd. Dtd считывается из базы данных (в виде строки).Проверка DTD-String с Nokogiri

Это пример в КРП сессии

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 из Nokogiri::XML::Document можно проверить только DTDs в документе. Как мне сделать это, чтобы заархивировать один и тот же результат?

ответ

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.

Thanks

+0

Я не использую HTML, поэтому это не работает для меня. Я создаю документ с помощью 'Nokogiri :: XML ('')', который оставляет меня с 'internal_subset => nil'. – krissi

Смежные вопросы