internal IEnumerable <TraceXPathNavigator.ElementNode> FindSubnodes(string[] headersPath) { TraceXPathNavigator.ElementNode elementNode; if (headersPath == null) { throw new ArgumentNullException("headersPath"); } TraceXPathNavigator.ElementNode elementNode1 = this; if (string.CompareOrdinal(elementNode1.name, headersPath[0]) != 0) { elementNode1 = null; } int num = 0; while (elementNode1 != null) { int num1 = num + 1; int num2 = num1; num = num1; if (num2 >= (int)headersPath.Length) { break; } TraceXPathNavigator.ElementNode elementNode2 = null; if (elementNode1.childNodes != null) { List <TraceXPathNavigator.TraceNode> .Enumerator enumerator = elementNode1.childNodes.GetEnumerator(); try { while (enumerator.MoveNext()) { TraceXPathNavigator.TraceNode current = enumerator.Current; if (current.NodeType != XPathNodeType.Element) { continue; } elementNode = current as TraceXPathNavigator.ElementNode; if (elementNode == null || string.CompareOrdinal(elementNode.name, headersPath[num]) != 0) { continue; } if ((int)headersPath.Length != num + 1) { goto Label0; } yield return(elementNode); } goto Label1; Label0: elementNode2 = elementNode; } finally { ((IDisposable)enumerator).Dispose(); } } Label1: elementNode1 = elementNode2; } }
public override bool MoveToNext() { if (this.current == null) { throw new InvalidOperationException(); } bool flag = false; if (this.state != XPathNodeType.Text) { TraceXPathNavigator.ElementNode elementNode = this.current.parent; if (elementNode != null) { TraceXPathNavigator.TraceNode next = elementNode.MoveToNext(); if (next == null && elementNode.text != null && !elementNode.movedToText) { this.state = XPathNodeType.Text; elementNode.movedToText = true; this.current = elementNode; flag = true; } else if (next != null) { this.state = next.NodeType; flag = true; this.current = next; } } } return(flag); }
public override bool MoveToParent() { if (this.current == null) { throw new InvalidOperationException(); } bool flag = false; switch (this.state) { case XPathNodeType.Element: case XPathNodeType.ProcessingInstruction: case XPathNodeType.Comment: { if (this.current.parent == null) { return(flag); } this.current = this.current.parent; this.state = this.current.NodeType; flag = true; return(flag); } case XPathNodeType.Attribute: { this.state = XPathNodeType.Element; flag = true; return(flag); } case XPathNodeType.Namespace: { this.state = XPathNodeType.Element; flag = true; return(flag); } case XPathNodeType.Text: { this.state = XPathNodeType.Element; flag = true; return(flag); } case XPathNodeType.SignificantWhitespace: case XPathNodeType.Whitespace: { return(flag); } default: { return(flag); } } }
internal TraceXPathNavigator.TraceNode MoveToNext() { TraceXPathNavigator.TraceNode item = null; if (this.elementIndex + 1 < this.childNodes.Count) { TraceXPathNavigator.ElementNode elementNode = this; elementNode.elementIndex = elementNode.elementIndex + 1; item = this.childNodes[this.elementIndex]; } return(item); }
internal void CloseElement() { if (this.closed) { throw new InvalidOperationException(); } this.current = this.CurrentElement.parent; if (this.current == null) { this.closed = true; } }
internal void AddElement(string prefix, string name, string xmlns) { if (this.closed) { throw new InvalidOperationException(); } TraceXPathNavigator.ElementNode elementNode = new TraceXPathNavigator.ElementNode(name, prefix, this.CurrentElement, xmlns); if (this.current == null) { this.VerifySize(elementNode); this.root = elementNode; this.current = this.root; return; } if (!this.closed) { this.VerifySize(elementNode); this.CurrentElement.Add(elementNode); this.current = elementNode; } }
public override bool MoveToFirstChild() { if (this.current == null) { throw new InvalidOperationException(); } bool flag = false; if (this.CurrentElement.childNodes != null && this.CurrentElement.childNodes.Count > 0) { this.current = this.CurrentElement.childNodes[0]; this.state = this.current.NodeType; flag = true; } else if ((this.CurrentElement.childNodes == null || this.CurrentElement.childNodes.Count == 0) && this.CurrentElement.text != null) { this.state = XPathNodeType.Text; this.CurrentElement.movedToText = true; flag = true; } return(flag); }
internal void Add(TraceXPathNavigator.TraceNode node) { this.childNodes.Add(node); }
public override void MoveToRoot() { this.current = this.root; this.state = XPathNodeType.Element; this.root.Reset(); }