2 // System.Xml.XmlDocumentType.cs
\r
4 // Author: Duncan Mak (duncan@ximian.com)
\r
5 // Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
\r
11 using System.Collections;
\r
14 namespace System.Xml
\r
16 public class XmlDocumentType : XmlLinkedNode
\r
19 // string name; // name of the document type
\r
20 // string publicId; // public identifier on the DOCTYPE
\r
21 // string systemId; // system identifier on the DOCTYPE
\r
22 // string internalSubset; // value of the DTD internal subset
\r
23 internal XmlNamedNodeMap entities;
\r
24 internal XmlNamedNodeMap notations;
\r
28 protected internal XmlDocumentType (string name, string publicId,
\r
29 string systemId, string internalSubset,
\r
33 XmlTextReader xtr = new XmlTextReader (BaseURI, new StringReader (""), doc.NameTable);
\r
34 xtr.XmlResolver = doc.Resolver;
\r
35 xtr.GenerateDTDObjectModel (name, publicId, systemId, internalSubset);
\r
41 internal XmlDocumentType (DTDObjectModel dtd, XmlDocument doc)
\r
48 private void ImportFromDTD ()
\r
50 entities = new XmlNamedNodeMap (this);
\r
51 notations = new XmlNamedNodeMap (this);
\r
53 foreach (DTDEntityDeclaration decl in DTD.EntityDecls.Values) {
54 XmlNode n = new XmlEntity (decl.Name, decl.NotationName,
55 decl.PublicId, decl.SystemId, OwnerDocument);
56 // FIXME: Value is more complex, similar to Attribute.
57 n.insertBeforeIntern (OwnerDocument.CreateTextNode (decl.LiteralEntityValue), null);
58 entities.Nodes.Add (n);
60 foreach (DTDNotationDeclaration decl in DTD.NotationDecls.Values) {
61 XmlNode n = new XmlNotation (decl.LocalName, decl.Prefix,
62 decl.PublicId, decl.SystemId, OwnerDocument);
63 notations.Nodes.Add (n);
68 internal DTDObjectModel DTD {
\r
72 public XmlNamedNodeMap Entities
\r
74 get { return entities; }
\r
77 public string InternalSubset
\r
79 get { return dtd.InternalSubset; }
\r
82 public override bool IsReadOnly
\r
84 get { return true; } // always return true
\r
87 public override string LocalName
\r
89 get { return dtd.Name; }
\r
92 public override string Name
\r
94 get { return dtd.Name; }
\r
97 public override XmlNodeType NodeType
\r
99 get { return XmlNodeType.DocumentType; }
\r
102 public XmlNamedNodeMap Notations
\r
104 get { return notations; }
\r
107 public string PublicId
\r
109 get { return dtd.PublicId; }
\r
112 public string SystemId
\r
114 get { return dtd.SystemId; }
\r
118 public override XmlNode CloneNode (bool deep)
\r
121 // return new XmlDocumentType (Name, PublicId, SystemId,
\r
122 // InternalSubset, OwnerDocument);
\r
123 return new XmlDocumentType (dtd, OwnerDocument);
\r
126 public override void WriteContentTo (XmlWriter w)
\r
131 public override void WriteTo (XmlWriter w)
\r
133 w.WriteDocType (Name, PublicId, SystemId, InternalSubset);
\r