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
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 // Similar to SAX DefaultHandler
\r
36 using System.Xml.Schema;
\r
40 internal class XmlFilterReader : XmlReader, IXmlLineInfo
\r
43 XmlReaderSettings settings;
\r
44 IXmlLineInfo lineInfo;
\r
46 public XmlFilterReader (XmlReader reader, XmlReaderSettings settings)
\r
48 this.reader = reader;
\r
49 this.settings = settings;
\r
50 this.lineInfo = reader as IXmlLineInfo;
\r
56 public override bool CanReadBinaryContent {
\r
57 get { return reader.CanReadBinaryContent; }
\r
60 public override bool CanReadValueChunk {
\r
61 get { return reader.CanReadValueChunk; }
\r
65 // This is the only one non-overriden property.
\r
66 public XmlReader Reader {
\r
67 get { return reader; }
\r
70 public int LineNumber {
\r
71 get { return lineInfo != null ? lineInfo.LineNumber : 0; }
\r
74 public int LinePosition {
\r
75 get { return lineInfo != null ? lineInfo.LinePosition : 0; }
\r
78 public override XmlNodeType NodeType
\r
80 get { return reader.NodeType; }
\r
83 public override string Name {
\r
84 get { return reader.Name; }
\r
87 public override string LocalName {
\r
88 get { return reader.LocalName; }
\r
91 public override string NamespaceURI {
\r
92 get { return reader.NamespaceURI; }
\r
95 public override string Prefix {
\r
96 get { return reader.Prefix; }
\r
99 public override bool HasValue {
\r
100 get { return reader.HasValue; }
\r
103 public override int Depth {
\r
104 get { return reader.Depth; }
\r
107 public override string Value {
\r
108 get { return reader.Value; }
\r
111 public override string BaseURI {
\r
112 get { return reader.BaseURI; }
\r
115 public override bool IsEmptyElement {
\r
116 get { return reader.IsEmptyElement; }
\r
119 public override bool IsDefault {
\r
120 get { return reader.IsDefault; }
\r
123 public override char QuoteChar {
\r
124 get { return reader.QuoteChar; }
\r
127 public override string XmlLang {
\r
128 get { return reader.XmlLang; }
\r
131 public override XmlSpace XmlSpace {
\r
132 get { return reader.XmlSpace; }
\r
135 public override int AttributeCount {
\r
136 get { return reader.AttributeCount; }
\r
139 public override string this [int i] {
\r
140 get { return reader [i]; }
\r
143 public override string this [string name] {
\r
144 get { return reader [name]; }
\r
147 public override string this [string localName, string namespaceURI] {
\r
148 get { return reader [localName, namespaceURI]; }
\r
151 public override bool EOF {
\r
152 get { return reader.EOF; }
\r
155 public override ReadState ReadState {
\r
156 get { return reader.ReadState; }
\r
159 public override XmlNameTable NameTable {
\r
160 get { return reader.NameTable; }
\r
163 public override IXmlSchemaInfo SchemaInfo {
\r
164 get { return reader.SchemaInfo; }
\r
167 public override XmlReaderSettings Settings {
\r
168 get { return settings; }
\r
174 public override string GetAttribute (string name)
\r
176 return reader.GetAttribute (name);
\r
179 public override string GetAttribute (string localName, string namespaceURI)
\r
181 return reader.GetAttribute (localName, namespaceURI);
\r
184 public override string GetAttribute (int i)
\r
186 return reader.GetAttribute (i);
\r
189 public bool HasLineInfo ()
\r
191 return lineInfo != null ? lineInfo.HasLineInfo () : false;
\r
194 public override bool MoveToAttribute (string name)
\r
196 return reader.MoveToAttribute (name);
\r
199 public override bool MoveToAttribute (string localName, string namespaceURI)
\r
201 return reader.MoveToAttribute (localName, namespaceURI);
\r
204 public override void MoveToAttribute (int i)
\r
206 reader.MoveToAttribute (i);
\r
209 public override bool MoveToFirstAttribute ()
\r
211 return reader.MoveToFirstAttribute ();
\r
214 public override bool MoveToNextAttribute ()
\r
216 return reader.MoveToNextAttribute ();
\r
219 public override bool MoveToElement ()
\r
221 return reader.MoveToElement ();
\r
224 public override void Close ()
\r
229 public override bool Read ()
\r
231 if (!reader.Read ())
\r
234 if (reader.NodeType == XmlNodeType.DocumentType && settings.ProhibitDtd)
\r
235 throw new XmlException ("Document Type Definition (DTD) is prohibited in this XML reader.");
\r
237 if (reader.NodeType == XmlNodeType.Whitespace &&
\r
238 settings.IgnoreWhitespace)
\r
240 if (reader.NodeType == XmlNodeType.ProcessingInstruction &&
\r
241 settings.IgnoreProcessingInstructions)
\r
243 if (reader.NodeType == XmlNodeType.Comment &&
\r
244 settings.IgnoreComments)
\r
250 public override string ReadString ()
\r
252 return reader.ReadString ();
\r
257 public override string ReadInnerXml ()
\r
259 return ReadInnerXmlInternal ();
\r
262 public override string ReadOuterXml ()
\r
264 return ReadOuterXmlInternal ();
\r
268 public override string LookupNamespace (string prefix)
\r
270 return reader.LookupNamespace (prefix);
\r
273 public override void ResolveEntity ()
\r
275 reader.ResolveEntity ();
\r
278 public override bool ReadAttributeValue () {
\r
279 return reader.ReadAttributeValue ();
\r