From: Oleg T. <he...@us...> - 2004-10-11 20:55:57
|
Update of /cvsroot/mvp-xml/XPointer/v1/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29783/v1/src Added Files: IDAssuredValidatingReader.cs Log Message: Auxillary XmlReader to support schema-determined IDs. --- NEW FILE: IDAssuredValidatingReader.cs --- #region using using System.Xml; #endregion /// <summary> /// Auxillary XmlReader that always reports dummy DOCTYPE. This is done /// to turn on support for id() function in XML Schema defined XML documents. /// See http://www.tkachenko.com/blog/archives/000060.html. /// </summary> public class IdAssuredValidatingReader : XmlValidatingReader { #region private members private bool _exposeDummyDoctype; private bool _isInProlog = true; #endregion #region constructors public IdAssuredValidatingReader(XmlReader r) : base (r) {} #endregion #region XmlValidatingReader overrides public override XmlNodeType NodeType { get { return _exposeDummyDoctype ? XmlNodeType.DocumentType : base.NodeType; } } public override bool MoveToNextAttribute() { return _exposeDummyDoctype? false : base.MoveToNextAttribute(); } public override bool Read() { if (_isInProlog) { if (!_exposeDummyDoctype) { //We are looking for the very first element bool baseRead = base.Read(); if (base.NodeType == XmlNodeType.Element) { _exposeDummyDoctype = true; return true; } else if (base.NodeType == XmlNodeType.DocumentType) { //Document has own DOCTYPE, switch back to normal flow _exposeDummyDoctype = false; _isInProlog = false; return true; } else { return baseRead; } } else { //Done, switch back to normal flow _exposeDummyDoctype = false; _isInProlog = false; return true; } } else return base.Read(); } #endregion } |