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.Clone ();
\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
100 public override bool HasValue {
\r
101 get { return reader.HasValue; }
\r
105 public override int Depth {
\r
106 get { return reader.Depth; }
\r
109 public override string Value {
\r
110 get { return reader.Value; }
\r
113 public override string BaseURI {
\r
114 get { return reader.BaseURI; }
\r
117 public override bool IsEmptyElement {
\r
118 get { return reader.IsEmptyElement; }
\r
121 public override bool IsDefault {
\r
122 get { return reader.IsDefault; }
\r
125 public override char QuoteChar {
\r
126 get { return reader.QuoteChar; }
\r
129 public override string XmlLang {
\r
130 get { return reader.XmlLang; }
\r
133 public override XmlSpace XmlSpace {
\r
134 get { return reader.XmlSpace; }
\r
137 public override int AttributeCount {
\r
138 get { return reader.AttributeCount; }
\r
141 public override string this [int i] {
\r
142 get { return reader [i]; }
\r
145 public override string this [string name] {
\r
146 get { return reader [name]; }
\r
149 public override string this [string localName, string namespaceURI] {
\r
150 get { return reader [localName, namespaceURI]; }
\r
153 public override bool EOF {
\r
154 get { return reader.EOF; }
\r
157 public override ReadState ReadState {
\r
158 get { return reader.ReadState; }
\r
161 public override XmlNameTable NameTable {
\r
162 get { return reader.NameTable; }
\r
166 public override IXmlSchemaInfo SchemaInfo {
\r
167 get { return reader.SchemaInfo; }
\r
171 public override XmlReaderSettings Settings {
\r
172 get { return settings; }
\r
178 public override string GetAttribute (string name)
\r
180 return reader.GetAttribute (name);
\r
183 public override string GetAttribute (string localName, string namespaceURI)
\r
185 return reader.GetAttribute (localName, namespaceURI);
\r
188 public override string GetAttribute (int i)
\r
190 return reader.GetAttribute (i);
\r
193 public bool HasLineInfo ()
\r
195 return lineInfo != null ? lineInfo.HasLineInfo () : false;
\r
198 public override bool MoveToAttribute (string name)
\r
200 return reader.MoveToAttribute (name);
\r
203 public override bool MoveToAttribute (string localName, string namespaceURI)
\r
205 return reader.MoveToAttribute (localName, namespaceURI);
\r
208 public override void MoveToAttribute (int i)
\r
210 reader.MoveToAttribute (i);
\r
213 public override bool MoveToFirstAttribute ()
\r
215 return reader.MoveToFirstAttribute ();
\r
218 public override bool MoveToNextAttribute ()
\r
220 return reader.MoveToNextAttribute ();
\r
223 public override bool MoveToElement ()
\r
225 return reader.MoveToElement ();
\r
228 public override void Close ()
\r
230 if (settings.CloseInput)
\r
234 public override bool Read ()
\r
236 if (!reader.Read ())
\r
239 if (reader.NodeType == XmlNodeType.DocumentType && settings.ProhibitDtd)
\r
240 throw new XmlException ("Document Type Definition (DTD) is prohibited in this XML reader.");
\r
242 if (reader.NodeType == XmlNodeType.Whitespace &&
\r
243 settings.IgnoreWhitespace)
\r
245 if (reader.NodeType == XmlNodeType.ProcessingInstruction &&
\r
246 settings.IgnoreProcessingInstructions)
\r
248 if (reader.NodeType == XmlNodeType.Comment &&
\r
249 settings.IgnoreComments)
\r
255 public override string ReadString ()
\r
257 return reader.ReadString ();
\r
262 public override string ReadInnerXml ()
\r
264 return ReadInnerXmlInternal ();
\r
267 public override string ReadOuterXml ()
\r
269 return ReadOuterXmlInternal ();
\r
273 public override string LookupNamespace (string prefix)
\r
275 return reader.LookupNamespace (prefix);
\r
278 public override void ResolveEntity ()
\r
280 reader.ResolveEntity ();
\r
284 public override bool ReadAttributeValue () {
\r
285 return reader.ReadAttributeValue ();
\r