Represents an XML DOCTYPE declaration; that is, the contents of <!DOCTYPE … >. DOCTYPES can be used to declare the DTD of a document, as well as being used to declare entities used in the document.
- A
- C
- E
- N
- P
- S
- W
START | = | "<!DOCTYPE" |
STOP | = | ">" |
SYSTEM | = | "SYSTEM" |
PUBLIC | = | "PUBLIC" |
DEFAULT_ENTITIES | = | { 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS } |
[R] | entities | name is the name of the doctype #external_id is the referenced DTD, if given |
[R] | external_id | name is the name of the doctype #external_id is the referenced DTD, if given |
[R] | name | name is the name of the doctype #external_id is the referenced DTD, if given |
[R] | namespaces | name is the name of the doctype #external_id is the referenced DTD, if given |
Constructor
dt = DocType.new( 'foo', '-//I/Hate/External/IDs' )
# <!DOCTYPE foo '-//I/Hate/External/IDs'>
dt = DocType.new( doctype_to_clone )
# Incomplete. Shallow clone of doctype
Note
that the constructor:
Doctype.new( Source.new( "<!DOCTYPE foo 'bar'>" ) )
is deprecated. Do not use it. It will probably disappear.
# File lib/rexml/doctype.rb, line 41 def initialize( first, parent=nil ) @entities = DEFAULT_ENTITIES @long_name = @uri = nil if first.kind_of? String super() @name = first @external_id = parent elsif first.kind_of? DocType super( parent ) @name = first.name @external_id = first.external_id elsif first.kind_of? Array super( parent ) @name = first[0] @external_id = first[1] @long_name = first[2] @uri = first[3] elsif first.kind_of? Source super( parent ) parser = Parsers::BaseParser.new( first ) event = parser.pull if event[0] == :start_doctype @name, @external_id, @long_name, @uri, = event[1..-1] end else super() end end
- output
-
Where to write the string
- indent
-
An integer. If -1, no indentation will be used; otherwise, the indentation will be this number of spaces, and children will be indented an additional amount.
- transitive
-
Ignored
- ie_hack
-
Ignored
# File lib/rexml/doctype.rb, line 108 def write( output, indent=0, transitive=false, ie_hack=false ) f = REXML::Formatters::Default.new indent( output, indent ) output << START output << ' ' output << @name output << " #@external_id" if @external_id output << " #{@long_name.inspect}" if @long_name output << " #{@uri.inspect}" if @uri unless @children.empty? output << ' [' @children.each { |child| output << "\n" f.write( child, output ) } output << "\n]" end output << STOP end