# REXML -- Parsing doctypes (and some some bugs)

**URL:** <https://www.ruby-forum.com/t/rexml-parsing-doctypes-and-some-some-bugs/51007>\
**Category:** Ruby\
**Created:** [December 23, 2005, 7:45pm UTC](https://www.ruby-forum.com/t/rexml-parsing-doctypes-and-some-some-bugs/51007 "2005-12-23T19:45:10Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![agnathan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/919ad9/32.png) [@agnathan](https://www.ruby-forum.com/u/agnathan)\
**Post date:** [December 23, 2005, 7:45pm UTC](https://www.ruby-forum.com/t/rexml-parsing-doctypes-and-some-some-bugs/51007/1 "2005-12-23T19:45:10Z")

</div>

(1) How does one parse a doctype in REXML?

Hack solution –  
#+++++++  
require ‘rexml/document’  
data =\<\<EOF

\<?xml version="1.0" encoding="utf-8" ?\> baz EOF p REXML::Document.new(data).doctype.instance\_variable\_get ("@long\_name")[1..-2] # =\> "foo.dtd" #+++++++

There must be a simple solution I am missing, what is it?

(2) In rexml/dtd/elementdecl, PATTERN\_RE is defined twice, issuing a  
warning (see [http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/classes/](http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/classes/)  
REXML/DTD/ElementDecl.html)

(3)  
#+++++++  
require ‘rexml/dtd/dtd’  
data =\<\<EOF

EOF

p REXML::DTD::Parser.parse(data)

# =\> /opt/local/lib/ruby/1.8/rexml/dtd/elementdecl.rb:8: warning:

already initialized constant PATTERN\_RE

# =\> /opt/local/lib/ruby/1.8/rexml/dtd/dtd.rb:25:in `parse\_helper’:

undefined method `PATTERN\_RE’ for REXML::DTD::ElementDecl:Class  
(NoMethodError)

# =\> from /opt/local/lib/ruby/1.8/rexml/dtd/dtd.rb:14:in `parse’

#+++++++

– Daniel
