Update of /cvsroot/mvp-xml/XPointer/v1/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11696/v1/src Modified Files: Pointer.cs SchemaBasedPointer.cs ShorthandPointer.cs XPointer.csproj XPointer.csproj.user XPointerReader.cs changelog.txt Log Message: Changed namespace to Mvp.Xml.XPointer. Externalized strings. Did general code review and cleanup. Simplified XPointerReader, switched to XPathDocument. Optimized by using XPathCache and XPathNavigatorReader. Index: Pointer.cs =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/Pointer.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Pointer.cs 28 Sep 2004 09:10:00 -0000 1.1 +++ Pointer.cs 9 Oct 2004 19:52:18 -0000 1.2 @@ -20,7 +20,7 @@ /// an instance of <see cref="Pointer"/> class. /// </summary> /// <param name="xpointer">XPointer pointer</param> - /// <returns>Pars3ed and compiled XPointer</returns> + /// <returns>Parsed and compiled XPointer</returns> public static Pointer Compile(string xpointer) { return XPointerParser.ParseXPointer(xpointer); @@ -32,7 +32,7 @@ /// </summary> /// <param name="doc">Document to evaluate the /// <see cref="XPointer"/> on.</param> - /// <returns><see cref="XPathNodeIterator"/> over pointed nodes</returns> + /// <returns><see cref="XPathNodeIterator"/> over pointed nodes. Note - this iterator is moved to the first node already.</returns> public abstract XPathNodeIterator Evaluate(IXPathNavigable doc); #endregion Index: SchemaBasedPointer.cs =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/SchemaBasedPointer.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- SchemaBasedPointer.cs 4 Oct 2004 19:04:35 -0000 1.2 +++ SchemaBasedPointer.cs 9 Oct 2004 19:52:19 -0000 1.3 @@ -64,7 +64,7 @@ { PointerPart part = (PointerPart)_parts[i]; result = part.Evaluate(nav, nm); - if (result != null && result.Count > 0) + if (result != null && result.MoveNext()) return result; } throw new NoSubresourcesIdentifiedException(SR.NoSubresourcesIdentifiedException); Index: ShorthandPointer.cs =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/ShorthandPointer.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ShorthandPointer.cs 4 Oct 2004 19:04:35 -0000 1.2 +++ ShorthandPointer.cs 9 Oct 2004 19:52:19 -0000 1.3 @@ -49,15 +49,18 @@ /// Evaluates <see cref="XPointer"/> pointer and returns /// iterator over pointed nodes. /// </summary> + /// <remarks>Note, that returned XPathNodeIterator is already moved once.</remarks> /// <param name="doc">Document to evaluate the /// <see cref="XPointer"/> on.</param> /// <returns><see cref="XPathNodeIterator"/> over pointed nodes</returns> public override XPathNodeIterator Evaluate(IXPathNavigable doc) { XPathNavigator nav = doc.CreateNavigator(); - XPathNodeIterator result = XPathCache.Select("id('"+ _NCName + "')", nav, (XmlNamespaceManager)null); - if (result != null && result.Count > 0) + XPathNodeIterator result = XPathCache.Select("id('"+ _NCName + "')", nav, (XmlNamespaceManager)null); + if (result != null && result.MoveNext()) + { return result; + } else throw new NoSubresourcesIdentifiedException(SR.NoSubresourcesIdentifiedException); } Index: changelog.txt =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/changelog.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- changelog.txt 28 Sep 2004 09:10:00 -0000 1.1 +++ changelog.txt 9 Oct 2004 19:52:19 -0000 1.2 @@ -1,3 +1,11 @@ +October 9, 2004 + +Changed namespace to Mvp.Xml.XPointer. +Externalized strings. +Did general code review and cleanup. +Simplified XPointerReader, switched to XPathDocument. +Optimized by using XPathCache and XPathNavigatorReader. + --------------------------------------------------------- September 28, 2004 Index: XPointer.csproj.user =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/XPointer.csproj.user,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- XPointer.csproj.user 4 Oct 2004 19:04:35 -0000 1.2 +++ XPointer.csproj.user 9 Oct 2004 19:52:19 -0000 1.3 @@ -40,7 +40,7 @@ CopyProjectDestinationFolder = "" CopyProjectUncPath = "" CopyProjectOption = "0" - ProjectView = "ShowAllFiles" + ProjectView = "ProjectFiles" ProjectTrust = "0" /> </CSHARP> Index: XPointerReader.cs =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/XPointerReader.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- XPointerReader.cs 28 Sep 2004 09:10:00 -0000 1.1 +++ XPointerReader.cs 9 Oct 2004 19:52:19 -0000 1.2 @@ -3,6 +3,7 @@ using System; using System.Xml; using System.Xml.XPath; +using System.Xml.Schema; using System.IO; using System.Collections; @@ -22,37 +23,65 @@ #region private members //Underlying reader - private XmlReader _reader, _extReader; - private Uri _uri; - private string _xpointer; - private Stream _stream; - private XmlNameTable _nt; - private XPathNodeIterator _pointedNodes; + private XmlReader _reader; + private XPathNodeIterator _pointedNodes; + + /// <summary> + /// Initializes the <c>XPointerReader</c>. + /// </summary> + private void Init(IXPathNavigable doc, string xpointer) + { + Pointer pointer = XPointerParser.ParseXPointer(xpointer); + _pointedNodes = pointer.Evaluate(doc); + //There is always at least one identified node + //XPathNodeIterator is already at the first node + _reader = new XPathNavigatorReader(_pointedNodes.Current); + } + //Dummy validation even handler + private static void ValidationCallback(object sender, ValidationEventArgs args) + { + //do nothing + } + + #endregion #region constructors /// <summary> + /// Creates <c>XPointerReader</c> instnace with given <see cref="IXpathNavigable"/> + /// and xpointer. + /// </summary> + public XPointerReader(IXPathNavigable doc, string xpointer) + { + Init(doc, xpointer); + } + + /// <summary> /// Creates <c>XPointerReader</c> instance with given uri, stream, nametable and xpointer. /// </summary> public XPointerReader(Uri uri, Stream stream, XmlNameTable nt, string xpointer) - { - _uri = uri; - _stream = stream; - _nt = nt; - _xpointer = xpointer; - } + : this (new XmlTextReader(uri.AbsoluteUri, stream, nt), xpointer) {} + + /// <summary> + /// Creates <c>XPointerReader</c> instance with given uri, stream and xpointer. + /// </summary> + public XPointerReader(Uri uri, Stream stream, string xpointer) + : this (uri, stream, new NameTable(), xpointer) {} /// <summary> - /// Creates <c>XPointerReader</c> instance with given XmlReader andxpointer. + /// Creates <c>XPointerReader</c> instance with given XmlReader and xpointer. /// </summary> - public XPointerReader(XmlReader reader, XmlNameTable nt, string xpointer) - { - _extReader = reader; - _xpointer = xpointer; - _nt = nt; - } + public XPointerReader(XmlReader reader, string xpointer) + { + XmlValidatingReader vr = new XmlValidatingReader(reader); + vr.EntityHandling = EntityHandling.ExpandEntities; + vr.ValidationType = ValidationType.None; + vr.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(ValidationCallback); + XPathDocument doc = new XPathDocument(vr, XmlSpace.Preserve); + Init(doc, xpointer); + } #endregion @@ -245,26 +274,7 @@ } public override bool Read() - { - if (_reader == null) - { - XPathDocument doc = null; - if (_extReader == null) - { - doc = new XPathDocument(new XmlTextReader( - _uri.AbsoluteUri, new StreamReader(_stream)), - XmlSpace.Preserve); - } - else - { - doc = new XPathDocument(_extReader, XmlSpace.Preserve); - } - Pointer pointer = XPointerParser.ParseXPointer(_xpointer); - _pointedNodes = pointer.Evaluate(doc); - //There is always at least one identified node - _pointedNodes.MoveNext(); - _reader = new XPathNavigatorReader(_pointedNodes.Current); - } + { bool baseRead = _reader.Read(); if (baseRead) return true; Index: XPointer.csproj =================================================================== RCS file: /cvsroot/mvp-xml/XPointer/v1/src/XPointer.csproj,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- XPointer.csproj 4 Oct 2004 19:04:35 -0000 1.2 +++ XPointer.csproj 9 Oct 2004 19:52:19 -0000 1.3 @@ -89,6 +89,10 @@ BuildAction = "Compile" /> <File + RelPath = "changelog.txt" + BuildAction = "Content" + /> + <File RelPath = "ElementSchemaPointerPart.cs" SubType = "Code" BuildAction = "Compile" |