| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- using System;
- using System.Xml;
- namespace System.Xml.Schema
- {
- /// <summary>
- /// A wrapper around XmlReader
- /// </summary>
- public class XmlSchemaReader : XmlReader, IXmlLineInfo
- {
- XmlReader reader;
- ValidationEventHandler handler;
- bool hasLineInfo;
- public XmlSchemaReader(XmlReader reader,ValidationEventHandler handler)
- {
- this.reader = reader;
- this.handler = handler;
- if(reader is IXmlLineInfo)
- {
- IXmlLineInfo info = (IXmlLineInfo)reader;
- hasLineInfo = info.HasLineInfo();
- }
- }
- /// <summary>
- /// Returns the Namespace:LocalName for the object
- /// </summary>
- public string FullName
- {
- get { return NamespaceURI + ":" + LocalName; }
- }
- public void RaiseInvalidElementError()
- {
- string errstr = "Element "+FullName + " is invalid in this context.\n";
- if(hasLineInfo)
- errstr += "The error occured on ("+((IXmlLineInfo)reader).LineNumber
- +","+((IXmlLineInfo)reader).LinePosition+")";
- XmlSchemaObject.error(handler, errstr, null);
- SkipToEnd();
- }
- /// <summary>
- /// Reads till the next Element or EndElement. Also checks that the Namespace of the element is
- /// Schema's Namespace.
- /// </summary>
- /// <returns></returns>
- public bool ReadNextElement()
- {
- MoveToElement();
- while(Read())
- {
- if(NodeType == XmlNodeType.Element || NodeType == XmlNodeType.EndElement)
- {
- if(reader.NamespaceURI != XmlSchema.Namespace)
- {
- RaiseInvalidElementError();
- }
- else
- {
- return true;
- }
- }
- }
- return false;
- }
- /// <summary>
- /// Skips to the end of the current element
- /// </summary>
- public void SkipToEnd()
- {
- MoveToElement();
- if(IsEmptyElement || NodeType != XmlNodeType.Element)
- return;
- if(NodeType == XmlNodeType.Element)
- {
- int depth = Depth;
- while(Read())
- {
- if(Depth == depth)
- break;
- }
- }
- return;
- }
- #region LineInfo
- public bool HasLineInfo()
- {
- return hasLineInfo;
- }
- public int LineNumber
- {
- get { return hasLineInfo?((IXmlLineInfo)reader).LineNumber: 0; }
- }
- public int LinePosition
- {
- get { return hasLineInfo?((IXmlLineInfo)reader).LinePosition: 0; }
- }
- #endregion
- #region Delegates
- public override int AttributeCount
- {
- get { return reader.AttributeCount; }
- }
- public override string BaseURI
- {
- get { return reader.BaseURI; }
- }
- public override bool CanResolveEntity
- {
- get { return reader.CanResolveEntity; }
- }
- public override int Depth
- {
- get { return reader.Depth; }
- }
- public override bool EOF
- {
- get { return reader.EOF; }
- }
- public override bool HasAttributes
- {
- get { return reader.HasAttributes; }
- }
- public override bool HasValue
- {
- get { return reader.HasValue; }
- }
- public override bool IsDefault
- {
- get { return reader.IsDefault; }
- }
- public override bool IsEmptyElement
- {
- get { return reader.IsEmptyElement; }
- }
- public override string this[ int i ]
- {
- get { return reader[i]; }
- }
- public override string this[ string name ]
- {
- get { return reader[name]; }
- }
- public override string this[ string name, string namespaceURI ]
- {
- get { return reader[name,namespaceURI]; }
- }
- public override string LocalName
- {
- get { return reader.LocalName; }
- }
- public override string Name
- {
- get { return reader.Name; }
- }
- public override string NamespaceURI
- {
- get { return reader.NamespaceURI; }
- }
- public override XmlNameTable NameTable
- {
- get { return reader.NameTable; }
- }
- public override XmlNodeType NodeType
- {
- get { return reader.NodeType; }
- }
- public override string Prefix
- {
- get { return reader.Prefix; }
- }
- public override char QuoteChar
- {
- get { return reader.QuoteChar; }
- }
- public override ReadState ReadState
- {
- get { return reader.ReadState; }
- }
- public override string Value
- {
- get { return reader.Value; }
- }
- public override string XmlLang
- {
- get { return reader.XmlLang; }
- }
- public override XmlSpace XmlSpace
- {
- get { return reader.XmlSpace; }
- }
- public override void Close()
- {
- reader.Close();
- }
- public override bool Equals(object obj)
- {
- return reader.Equals(obj);
- }
- public override string GetAttribute(int i)
- {
- return reader.GetAttribute(i);
- }
- public override string GetAttribute(string name)
- {
- return reader.GetAttribute(name);
- }
- public override string GetAttribute(string name, string namespaceURI)
- {
- return reader.GetAttribute(name, namespaceURI);
- }
- public override int GetHashCode()
- {
- return reader.GetHashCode();
- }
- public override bool IsStartElement()
- {
- return reader.IsStartElement();
- }
- public override bool IsStartElement(string localname, string ns)
- {
- return reader.IsStartElement(localname, ns);
- }
- public override bool IsStartElement(string name)
- {
- return reader.IsStartElement(name);
- }
- public override string LookupNamespace(string prefix)
- {
- return reader.LookupNamespace(prefix);
- }
- public override void MoveToAttribute(int i)
- {
- reader.MoveToAttribute(i);
- }
- public override bool MoveToAttribute(string name)
- {
- return reader.MoveToAttribute(name);
- }
- public override bool MoveToAttribute(string name, string ns)
- {
- return reader.MoveToAttribute(name,ns);
- }
- public override System.Xml.XmlNodeType MoveToContent()
- {
- return reader.MoveToContent();
- }
- public override bool MoveToElement()
- {
- return reader.MoveToElement();
- }
- public override bool MoveToFirstAttribute()
- {
- return reader.MoveToFirstAttribute();
- }
- public override bool MoveToNextAttribute()
- {
- return reader.MoveToNextAttribute();
- }
- public override bool Read()
- {
- return reader.Read();
- }
- public override bool ReadAttributeValue()
- {
- return reader.ReadAttributeValue();
- }
- public override string ReadElementString()
- {
- return reader.ReadElementString();
- }
- public override string ReadElementString(string localname, string ns)
- {
- return reader.ReadElementString(localname, ns);
- }
- public override string ReadElementString(string name)
- {
- return reader.ReadElementString(name);
- }
- public override void ReadEndElement()
- {
- reader.ReadEndElement();
- }
- public override string ReadInnerXml()
- {
- return reader.ReadInnerXml();
- }
- public override string ReadOuterXml()
- {
- return reader.ReadOuterXml();
- }
- public override void ReadStartElement()
- {
- reader.ReadStartElement();
- }
- public override void ReadStartElement(string localname, string ns)
- {
- reader.ReadStartElement(localname, ns);
- }
- public override void ReadStartElement(string name)
- {
- reader.ReadStartElement(name);
- }
- public override string ReadString()
- {
- return reader.ReadString();
- }
- public override void ResolveEntity()
- {
- reader.ResolveEntity();
- }
- public override void Skip()
- {
- reader.Skip();
- }
- public override string ToString()
- {
- return reader.ToString();
- }
- #endregion
- }
- }
|