DescendantQuery.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / DescendantQuery.cs / 1305376 / DescendantQuery.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
//-----------------------------------------------------------------------------
 
namespace MS.Internal.Xml.XPath { 
    using System;
    using System.Xml; 
    using System.Xml.XPath;
    using System.Diagnostics;

    internal class DescendantQuery : DescendantBaseQuery { 
        XPathNodeIterator nodeIterator;
 
        internal DescendantQuery(Query  qyParent, string Name, string Prefix, XPathNodeType Type, bool matchSelf, bool abbrAxis) 
            : base(qyParent, Name, Prefix, Type, matchSelf, abbrAxis) {}
 
        public DescendantQuery(DescendantQuery other) : base(other) {
            this.nodeIterator = Clone(other.nodeIterator);
        }
 
        public override void Reset() {
            nodeIterator = null; 
            base.Reset(); 
        }
 
        public override XPathNavigator Advance() {
            while (true) {
                if (nodeIterator == null) {
                    position = 0; 
                    XPathNavigator nav = qyInput.Advance();
                    if (nav == null) { 
                        return null; 
                    }
                    if (NameTest) { 
                        if (TypeTest == XPathNodeType.ProcessingInstruction) {
                            nodeIterator = new IteratorFilter(nav.SelectDescendants(TypeTest, matchSelf), Name);
                        } else {
                            nodeIterator = nav.SelectDescendants(Name, Namespace, matchSelf); 
                        }
                    } else { 
                        nodeIterator = nav.SelectDescendants(TypeTest, matchSelf); 
                    }
                } 

                if (nodeIterator.MoveNext()) {
                    position++;
                    currentNode = nodeIterator.Current; 
                    return currentNode;
                } else { 
                    nodeIterator = null; 
                }
            } 
        }

        public override XPathNodeIterator Clone() { return new DescendantQuery(this); }
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK