Welcome to mirror list, hosted at ThFree Co, Russian Federation.

XmlDocumentType.cs « Dom « Xml « System « System.Xml « referencesource « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 19ae68b987ab761881f32e067ffaed6b424d6537 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//------------------------------------------------------------------------------
// <copyright file="XmlDocumentType.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
// <owner current="true" primary="true">Microsoft</owner>
//------------------------------------------------------------------------------

namespace System.Xml {

    using System.Xml.Schema;
    using System.Diagnostics;

    // Contains information associated with the document type declaration.
    public class XmlDocumentType : XmlLinkedNode {
        string name;
        string publicId;
        string systemId;
        string internalSubset;
        bool namespaces;
        XmlNamedNodeMap entities;
        XmlNamedNodeMap notations;

        // parsed DTD
        SchemaInfo schemaInfo;

        protected internal XmlDocumentType( string name, string publicId, string systemId, string internalSubset, XmlDocument doc ) : base( doc ) {
            this.name     = name;
            this.publicId = publicId;
            this.systemId = systemId;
            this.namespaces = true;
            this.internalSubset = internalSubset;
            Debug.Assert( doc != null );
            if ( !doc.IsLoading ) {
                doc.IsLoading = true;
                XmlLoader loader = new XmlLoader();
                loader.ParseDocumentType( this ); //will edit notation nodes, etc.
                doc.IsLoading = false;
            }
        }

        // Gets the name of the node.
        public override string Name {
            get { return name;}
        }

        // Gets the name of the current node without the namespace prefix.
        public override string LocalName {
            get { return name;}
        }

        // Gets the type of the current node.
        public override XmlNodeType NodeType {
            get { return XmlNodeType.DocumentType;}
        }

        // Creates a duplicate of this node.
        public override XmlNode CloneNode(bool deep) {
            Debug.Assert( OwnerDocument != null );
            return OwnerDocument.CreateDocumentType( name, publicId, systemId, internalSubset );
        }

        // 
        // Microsoft extensions
        //

        //  Gets a value indicating whether the node is read-only.
        public override bool IsReadOnly {
            get { 
                return true;        // Make entities and notations readonly
            }
        }

        // Gets the collection of XmlEntity nodes declared in the document type declaration.
        public XmlNamedNodeMap Entities { 
            get { 
                if (entities == null)
                    entities = new XmlNamedNodeMap( this );

                return entities;
            }
        }

        // Gets the collection of XmlNotation nodes present in the document type declaration.
        public XmlNamedNodeMap Notations { 
            get {
                if (notations == null)
                    notations = new XmlNamedNodeMap( this );

                return notations;
            }
        }

        //
        // DOM Level 2
        //

        // Gets the value of the public identifier on the DOCTYPE declaration.
        public string PublicId { 
            get { return publicId;} 
        }

        // Gets the value of
        // the system identifier on the DOCTYPE declaration.
        public string SystemId { 
            get { return systemId;} 
        }

        // Gets the entire value of the DTD internal subset
        // on the DOCTYPE declaration.
        public string InternalSubset { 
            get { return internalSubset;}
        }

        internal bool ParseWithNamespaces {
            get { return namespaces; }
            set { namespaces = value; }
        }

        // Saves the node to the specified XmlWriter.
        public override void WriteTo(XmlWriter w) {
            w.WriteDocType( name, publicId, systemId, internalSubset );
        }

        // Saves all the children of the node to the specified XmlWriter.
        public override void WriteContentTo(XmlWriter w) {
            // Intentionally do nothing
        }

        internal SchemaInfo DtdSchemaInfo {
            get {
                return schemaInfo;
            }
            set {
                schemaInfo = value;
            }
        }
    }
}