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
}
|