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
28 /// A wrapper around XmlReader
30 internal class XmlSchemaReader
: XmlReader
, IXmlLineInfo
33 ValidationEventHandler handler
;
35 public XmlSchemaReader(XmlReader reader
,ValidationEventHandler handler
)
38 this.handler
= handler
;
39 if(reader
is IXmlLineInfo
)
41 IXmlLineInfo info
= (IXmlLineInfo
)reader
;
42 hasLineInfo
= info
.HasLineInfo();
47 /// Returns the Namespace:LocalName for the object
49 public string FullName
51 get { return NamespaceURI + ":" + LocalName; }
54 public XmlReader Reader
56 get { return this.reader; }
59 public void RaiseInvalidElementError()
61 string errstr
= "Element "+FullName
+ " is invalid in this context.\n";
63 errstr
+= "The error occured on ("+((IXmlLineInfo
)reader
).LineNumber
64 +","+((IXmlLineInfo
)reader
).LinePosition
+")";
65 XmlSchemaObject
.error(handler
, errstr
, null);
69 /// Reads till the next Element or EndElement. Also checks that the Namespace of the element is
70 /// Schema's Namespace.
72 /// <returns></returns>
73 public bool ReadNextElement()
78 if(NodeType
== XmlNodeType
.Element
|| NodeType
== XmlNodeType
.EndElement
)
80 if(reader
.NamespaceURI
!= XmlSchema
.Namespace
)
82 RaiseInvalidElementError();
94 /// Skips to the end of the current element
96 public void SkipToEnd()
99 if(IsEmptyElement
|| NodeType
!= XmlNodeType
.Element
)
101 if(NodeType
== XmlNodeType
.Element
)
114 public bool HasLineInfo()
118 public int LineNumber
120 get { return hasLineInfo?((IXmlLineInfo)reader).LineNumber: 0; }
122 public int LinePosition
124 get { return hasLineInfo?((IXmlLineInfo)reader).LinePosition: 0; }
129 public override int AttributeCount
131 get { return reader.AttributeCount; }
133 public override string BaseURI
135 get { return reader.BaseURI; }
137 public override bool CanResolveEntity
139 get { return reader.CanResolveEntity; }
141 public override int Depth
143 get { return reader.Depth; }
145 public override bool EOF
147 get { return reader.EOF; }
149 public override bool HasAttributes
151 get { return reader.HasAttributes; }
153 public override bool HasValue
155 get { return reader.HasValue; }
157 public override bool IsDefault
159 get { return reader.IsDefault; }
161 public override bool IsEmptyElement
163 get { return reader.IsEmptyElement; }
165 public override string this[ int i
]
167 get { return reader[i]; }
169 public override string this[ string name
]
171 get { return reader[name]; }
173 public override string this[ string name
, string namespaceURI
]
175 get { return reader[name,namespaceURI]; }
177 public override string LocalName
179 get { return reader.LocalName; }
181 public override string Name
183 get { return reader.Name; }
185 public override string NamespaceURI
187 get { return reader.NamespaceURI; }
189 public override XmlNameTable NameTable
191 get { return reader.NameTable; }
193 public override XmlNodeType NodeType
195 get { return reader.NodeType; }
197 public override string Prefix
199 get { return reader.Prefix; }
201 public override char QuoteChar
203 get { return reader.QuoteChar; }
205 public override ReadState ReadState
207 get { return reader.ReadState; }
209 public override string Value
211 get { return reader.Value; }
213 public override string XmlLang
215 get { return reader.XmlLang; }
217 public override XmlSpace XmlSpace
219 get { return reader.XmlSpace; }
222 public override void Close()
227 public override bool Equals(object obj
)
229 return reader
.Equals(obj
);
232 public override string GetAttribute(int i
)
234 return reader
.GetAttribute(i
);
237 public override string GetAttribute(string name
)
239 return reader
.GetAttribute(name
);
242 public override string GetAttribute(string name
, string namespaceURI
)
244 return reader
.GetAttribute(name
, namespaceURI
);
247 public override int GetHashCode()
249 return reader
.GetHashCode();
252 public override bool IsStartElement()
254 return reader
.IsStartElement();
257 public override bool IsStartElement(string localname
, string ns
)
259 return reader
.IsStartElement(localname
, ns
);
262 public override bool IsStartElement(string name
)
264 return reader
.IsStartElement(name
);
267 public override string LookupNamespace(string prefix
)
269 return reader
.LookupNamespace(prefix
);
272 public override void MoveToAttribute(int i
)
274 reader
.MoveToAttribute(i
);
277 public override bool MoveToAttribute(string name
)
279 return reader
.MoveToAttribute(name
);
282 public override bool MoveToAttribute(string name
, string ns
)
284 return reader
.MoveToAttribute(name
,ns
);
287 public override System
.Xml
.XmlNodeType
MoveToContent()
289 return reader
.MoveToContent();
292 public override bool MoveToElement()
294 return reader
.MoveToElement();
297 public override bool MoveToFirstAttribute()
299 return reader
.MoveToFirstAttribute();
302 public override bool MoveToNextAttribute()
304 return reader
.MoveToNextAttribute();
307 public override bool Read()
309 return reader
.Read();
312 public override bool ReadAttributeValue()
314 return reader
.ReadAttributeValue();
317 public override string ReadElementString()
319 return reader
.ReadElementString();
322 public override string ReadElementString(string localname
, string ns
)
324 return reader
.ReadElementString(localname
, ns
);
327 public override string ReadElementString(string name
)
329 return reader
.ReadElementString(name
);
332 public override void ReadEndElement()
334 reader
.ReadEndElement();
337 public override string ReadInnerXml()
339 return reader
.ReadInnerXml();
342 public override string ReadOuterXml()
344 return reader
.ReadOuterXml();
347 public override void ReadStartElement()
349 reader
.ReadStartElement();
352 public override void ReadStartElement(string localname
, string ns
)
354 reader
.ReadStartElement(localname
, ns
);
357 public override void ReadStartElement(string name
)
359 reader
.ReadStartElement(name
);
362 public override string ReadString()
364 return reader
.ReadString();
367 public override void ResolveEntity()
369 reader
.ResolveEntity();
372 public override void Skip()
377 public override string ToString()
379 return reader
.ToString();