System.Xml.DocumentXPathNavigator.ComparePosition C# (CSharp) Méthode

ComparePosition() public méthode

public ComparePosition ( XPathNavigator other ) : XmlNodeOrder
other System.Xml.XPath.XPathNavigator
Résultat XmlNodeOrder
        public override XmlNodeOrder ComparePosition(XPathNavigator other) {
            DocumentXPathNavigator that = other as DocumentXPathNavigator;
            if (that == null) {
                return XmlNodeOrder.Unknown;
            }

            this.CalibrateText();
            that.CalibrateText();

            if (this.source == that.source
                && this.namespaceParent == that.namespaceParent) {
                return XmlNodeOrder.Same;
            }

            if (this.namespaceParent != null
                || that.namespaceParent != null) {
                return base.ComparePosition(other);
            }

            XmlNode node1 = this.source;
            XmlNode node2 = that.source;

            XmlNode parent1 = OwnerNode(node1);
            XmlNode parent2 = OwnerNode(node2);
            if (parent1 == parent2) {
                if (parent1 == null) {
                    return XmlNodeOrder.Unknown; 
                }
                else {
                    Debug.Assert(node1 != node2);
                    return Compare(node1, node2);
                }
            }

            int depth1 = GetDepth(node1);
            int depth2 = GetDepth(node2);
            if (depth2 > depth1) {
                while (node2 != null 
                       && depth2 > depth1) {
                    node2 = OwnerNode(node2);
                    depth2--;
                }
                if (node1 == node2) {
                    return XmlNodeOrder.Before;
                }
                parent2 = OwnerNode(node2);
            }
            else if (depth1 > depth2) {
                while (node1 != null 
                       && depth1 > depth2) {
                    node1 = OwnerNode(node1);
                    depth1--;
                }
                if (node1 == node2) {
                    return XmlNodeOrder.After;
                }
                parent1 = OwnerNode(node1);
            }

            while (parent1 != null 
                   && parent2 != null) {
                if (parent1 == parent2) {
                    Debug.Assert(node1 != node2);
                    return Compare(node1, node2);
                }
                node1 = parent1;
                node2 = parent2;
                parent1 = OwnerNode(node1);
                parent2 = OwnerNode(node2);
            }
            return XmlNodeOrder.Unknown;
        }