2 // Mono.Xml.XmlFilterReader.cs
\r
5 // Atsushi Enomoto <atsushi@ximian.com>
\r
7 // Copyright (c) 2004 Novell Inc. All rights reserved
\r
9 // Permission is hereby granted, free of charge, to any person obtaining
\r
10 // a copy of this software and associated documentation files (the
\r
11 // "Software"), to deal in the Software without restriction, including
\r
12 // without limitation the rights to use, copy, modify, merge, publish,
\r
13 // distribute, sublicense, and/or sell copies of the Software, and to
\r
14 // permit persons to whom the Software is furnished to do so, subject to
\r
15 // the following conditions:
\r
17 // The above copyright notice and this permission notice shall be
\r
18 // included in all copies or substantial portions of the Software.
\r
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
\r
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
\r
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
\r
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
\r
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\r
30 // Similar to SAX DefaultHandler
\r
35 using System.Collections.Generic;
\r
37 using System.Xml.Schema;
\r
41 internal class XmlFilterReader : XmlReader, IXmlLineInfo, IXmlNamespaceResolver
\r
44 XmlReaderSettings settings;
\r
45 IXmlLineInfo lineInfo;
\r
47 public XmlFilterReader (XmlReader reader, XmlReaderSettings settings)
\r
49 this.reader = reader;
\r
50 this.settings = settings.Clone ();
\r
51 this.lineInfo = reader as IXmlLineInfo;
\r
57 public override bool CanReadBinaryContent {
\r
58 get { return reader.CanReadBinaryContent; }
\r
61 public override bool CanReadValueChunk {
\r
62 get { return reader.CanReadValueChunk; }
\r
66 // This is the only one non-overriden property.
\r
67 public XmlReader Reader {
\r
68 get { return reader; }
\r
71 public int LineNumber {
\r
72 get { return lineInfo != null ? lineInfo.LineNumber : 0; }
\r
75 public int LinePosition {
\r
76 get { return lineInfo != null ? lineInfo.LinePosition : 0; }
\r
79 public override XmlNodeType NodeType
\r
81 get { return reader.NodeType; }
\r
84 public override string Name {
\r
85 get { return reader.Name; }
\r
88 public override string LocalName {
\r
89 get { return reader.LocalName; }
\r
92 public override string NamespaceURI {
\r
93 get { return reader.NamespaceURI; }
\r
96 public override string Prefix {
\r
97 get { return reader.Prefix; }
\r
100 public override bool HasValue {
\r
101 get { return reader.HasValue; }
\r
104 public override int Depth {
\r
105 get { return reader.Depth; }
\r
108 public override string Value {
\r
109 get { return reader.Value; }
\r
112 public override string BaseURI {
\r
113 get { return reader.BaseURI; }
\r
116 public override bool IsEmptyElement {
\r
117 get { return reader.IsEmptyElement; }
\r
120 public override bool IsDefault {
\r
121 get { return reader.IsDefault; }
\r
124 public override char QuoteChar {
\r
125 get { return reader.QuoteChar; }
\r
128 public override string XmlLang {
\r
129 get { return reader.XmlLang; }
\r
132 public override XmlSpace XmlSpace {
\r
133 get { return reader.XmlSpace; }
\r
136 public override int AttributeCount {
\r
137 get { return reader.AttributeCount; }
\r
140 public override string this [int i] {
\r
141 get { return reader [i]; }
\r
144 public override string this [string name] {
\r
145 get { return reader [name]; }
\r
148 public override string this [string localName, string namespaceURI] {
\r
149 get { return reader [localName, namespaceURI]; }
\r
152 public override bool EOF {
\r
153 get { return reader.EOF; }
\r
156 public override ReadState ReadState {
\r
157 get { return reader.ReadState; }
\r
160 public override XmlNameTable NameTable {
\r
161 get { return reader.NameTable; }
\r
165 public override IXmlSchemaInfo SchemaInfo {
\r
166 get { return reader.SchemaInfo; }
\r
170 public override XmlReaderSettings Settings {
\r
171 get { return settings; }
\r
177 public override string GetAttribute (string name)
\r
179 return reader.GetAttribute (name);
\r
182 public override string GetAttribute (string localName, string namespaceURI)
\r
184 return reader.GetAttribute (localName, namespaceURI);
\r
187 public override string GetAttribute (int i)
\r
189 return reader.GetAttribute (i);
\r
192 public bool HasLineInfo ()
\r
194 return lineInfo != null ? lineInfo.HasLineInfo () : false;
\r
197 public override bool MoveToAttribute (string name)
\r
199 return reader.MoveToAttribute (name);
\r
202 public override bool MoveToAttribute (string localName, string namespaceURI)
\r
204 return reader.MoveToAttribute (localName, namespaceURI);
\r
207 public override void MoveToAttribute (int i)
\r
209 reader.MoveToAttribute (i);
\r
212 public override bool MoveToFirstAttribute ()
\r
214 return reader.MoveToFirstAttribute ();
\r
217 public override bool MoveToNextAttribute ()
\r
219 return reader.MoveToNextAttribute ();
\r
222 public override bool MoveToElement ()
\r
224 return reader.MoveToElement ();
\r
227 public override void Close ()
\r
229 if (settings.CloseInput)
\r
233 public override bool Read ()
\r
235 if (!reader.Read ())
\r
238 if (reader.NodeType == XmlNodeType.DocumentType && settings.ProhibitDtd)
\r
239 throw new XmlException ("Document Type Definition (DTD) is prohibited in this XML reader.");
\r
241 if (reader.NodeType == XmlNodeType.Whitespace &&
\r
242 settings.IgnoreWhitespace)
\r
244 if (reader.NodeType == XmlNodeType.ProcessingInstruction &&
\r
245 settings.IgnoreProcessingInstructions)
\r
247 if (reader.NodeType == XmlNodeType.Comment &&
\r
248 settings.IgnoreComments)
\r
254 public override string ReadString ()
\r
256 return reader.ReadString ();
\r
261 public override string ReadInnerXml ()
\r
263 return ReadInnerXmlInternal ();
\r
266 public override string ReadOuterXml ()
\r
268 return ReadOuterXmlInternal ();
\r
272 public override string LookupNamespace (string prefix)
\r
274 return reader.LookupNamespace (prefix);
\r
277 public override void ResolveEntity ()
\r
279 reader.ResolveEntity ();
\r
282 public override bool ReadAttributeValue () {
\r
283 return reader.ReadAttributeValue ();
\r
286 string IXmlNamespaceResolver.LookupPrefix (string ns)
\r
288 return ((IXmlNamespaceResolver) reader).LookupPrefix (ns);
\r
291 IDictionary<string, string> IXmlNamespaceResolver.GetNamespacesInScope (XmlNamespaceScope scope)
\r
293 return ((IXmlNamespaceResolver) reader).GetNamespacesInScope (scope);
\r