3 // Permission is hereby granted, free of charge, to any person obtaining
4 // a copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to
8 // permit persons to whom the Software is furnished to do so, subject to
9 // the following conditions:
11 // The above copyright notice and this permission notice shall be
12 // included in all copies or substantial portions of the Software.
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 namespace System.Xml.Schema
\r
28 /// A wrapper around XmlReader
\r
30 internal class XmlSchemaReader : XmlReader, IXmlLineInfo
\r
33 ValidationEventHandler handler;
\r
35 public XmlSchemaReader(XmlReader reader,ValidationEventHandler handler)
\r
37 this.reader = reader;
\r
38 this.handler = handler;
\r
39 if(reader is IXmlLineInfo)
\r
41 IXmlLineInfo info = (IXmlLineInfo)reader;
\r
42 hasLineInfo = info.HasLineInfo();
\r
47 /// Returns the Namespace:LocalName for the object
\r
49 public string FullName
\r
51 get { return NamespaceURI + ":" + LocalName; }
\r
54 public XmlReader Reader
\r
56 get { return this.reader; }
\r
59 public void RaiseInvalidElementError()
\r
61 string errstr = "Element "+FullName + " is invalid in this context.\n";
\r
63 errstr += "The error occured on ("+((IXmlLineInfo)reader).LineNumber
\r
64 +","+((IXmlLineInfo)reader).LinePosition+")";
\r
65 XmlSchemaObject.error(handler, errstr, null);
\r
69 /// Reads till the next Element or EndElement. Also checks that the Namespace of the element is
\r
70 /// Schema's Namespace.
\r
72 /// <returns></returns>
\r
73 public bool ReadNextElement()
\r
78 if(NodeType == XmlNodeType.Element || NodeType == XmlNodeType.EndElement)
\r
80 if(reader.NamespaceURI != XmlSchema.Namespace)
\r
82 RaiseInvalidElementError();
\r
94 /// Skips to the end of the current element
\r
96 public void SkipToEnd()
\r
99 if(IsEmptyElement || NodeType != XmlNodeType.Element)
\r
101 if(NodeType == XmlNodeType.Element)
\r
114 public bool HasLineInfo()
\r
116 return hasLineInfo;
\r
118 public int LineNumber
\r
120 get { return hasLineInfo?((IXmlLineInfo)reader).LineNumber: 0; }
\r
122 public int LinePosition
\r
124 get { return hasLineInfo?((IXmlLineInfo)reader).LinePosition: 0; }
\r
129 public override int AttributeCount
\r
131 get { return reader.AttributeCount; }
\r
133 public override string BaseURI
\r
135 get { return reader.BaseURI; }
\r
137 public override bool CanResolveEntity
\r
139 get { return reader.CanResolveEntity; }
\r
141 public override int Depth
\r
143 get { return reader.Depth; }
\r
145 public override bool EOF
\r
147 get { return reader.EOF; }
\r
149 public override bool HasAttributes
\r
151 get { return reader.HasAttributes; }
\r
153 public override bool HasValue
\r
155 get { return reader.HasValue; }
\r
157 public override bool IsDefault
\r
159 get { return reader.IsDefault; }
\r
161 public override bool IsEmptyElement
\r
163 get { return reader.IsEmptyElement; }
\r
165 public override string this[ int i ]
\r
167 get { return reader[i]; }
\r
169 public override string this[ string name ]
\r
171 get { return reader[name]; }
\r
173 public override string this[ string name, string namespaceURI ]
\r
175 get { return reader[name,namespaceURI]; }
\r
177 public override string LocalName
\r
179 get { return reader.LocalName; }
\r
181 public override string Name
\r
183 get { return reader.Name; }
\r
185 public override string NamespaceURI
\r
187 get { return reader.NamespaceURI; }
\r
189 public override XmlNameTable NameTable
\r
191 get { return reader.NameTable; }
\r
193 public override XmlNodeType NodeType
\r
195 get { return reader.NodeType; }
\r
197 public override string Prefix
\r
199 get { return reader.Prefix; }
\r
201 public override char QuoteChar
\r
203 get { return reader.QuoteChar; }
\r
205 public override ReadState ReadState
\r
207 get { return reader.ReadState; }
\r
209 public override string Value
\r
211 get { return reader.Value; }
\r
213 public override string XmlLang
\r
215 get { return reader.XmlLang; }
\r
217 public override XmlSpace XmlSpace
\r
219 get { return reader.XmlSpace; }
\r
222 public override void Close()
\r
227 public override bool Equals(object obj)
\r
229 return reader.Equals(obj);
\r
232 public override string GetAttribute(int i)
\r
234 return reader.GetAttribute(i);
\r
237 public override string GetAttribute(string name)
\r
239 return reader.GetAttribute(name);
\r
242 public override string GetAttribute(string name, string namespaceURI)
\r
244 return reader.GetAttribute(name, namespaceURI);
\r
247 public override int GetHashCode()
\r
249 return reader.GetHashCode();
\r
252 public override bool IsStartElement()
\r
254 return reader.IsStartElement();
\r
257 public override bool IsStartElement(string localname, string ns)
\r
259 return reader.IsStartElement(localname, ns);
\r
262 public override bool IsStartElement(string name)
\r
264 return reader.IsStartElement(name);
\r
267 public override string LookupNamespace(string prefix)
\r
269 return reader.LookupNamespace(prefix);
\r
272 public override void MoveToAttribute(int i)
\r
274 reader.MoveToAttribute(i);
\r
277 public override bool MoveToAttribute(string name)
\r
279 return reader.MoveToAttribute(name);
\r
282 public override bool MoveToAttribute(string name, string ns)
\r
284 return reader.MoveToAttribute(name,ns);
\r
287 public override System.Xml.XmlNodeType MoveToContent()
\r
289 return reader.MoveToContent();
\r
292 public override bool MoveToElement()
\r
294 return reader.MoveToElement();
\r
297 public override bool MoveToFirstAttribute()
\r
299 return reader.MoveToFirstAttribute();
\r
302 public override bool MoveToNextAttribute()
\r
304 return reader.MoveToNextAttribute();
\r
307 public override bool Read()
\r
309 return reader.Read();
\r
312 public override bool ReadAttributeValue()
\r
314 return reader.ReadAttributeValue();
\r
317 public override string ReadElementString()
\r
319 return reader.ReadElementString();
\r
322 public override string ReadElementString(string localname, string ns)
\r
324 return reader.ReadElementString(localname, ns);
\r
327 public override string ReadElementString(string name)
\r
329 return reader.ReadElementString(name);
\r
332 public override void ReadEndElement()
\r
334 reader.ReadEndElement();
\r
337 public override string ReadInnerXml()
\r
339 return reader.ReadInnerXml();
\r
342 public override string ReadOuterXml()
\r
344 return reader.ReadOuterXml();
\r
347 public override void ReadStartElement()
\r
349 reader.ReadStartElement();
\r
352 public override void ReadStartElement(string localname, string ns)
\r
354 reader.ReadStartElement(localname, ns);
\r
357 public override void ReadStartElement(string name)
\r
359 reader.ReadStartElement(name);
\r
362 public override string ReadString()
\r
364 return reader.ReadString();
\r
367 public override void ResolveEntity()
\r
369 reader.ResolveEntity();
\r
372 public override void Skip()
\r
377 public override string ToString()
\r
379 return reader.ToString();
\r