public override XmlWriter ReplaceRange(XPathNavigator nav) { if (nav == null) { throw new ArgumentNullException(); } XmlNode start = ((IHasXmlNode)navigator).GetNode(); XmlNode end = null; if (nav is IHasXmlNode) { end = ((IHasXmlNode)nav).GetNode(); } if (end == null || start.ParentNode != end.ParentNode) { throw new InvalidOperationException("Argument XPathNavigator has different parent node."); } XmlDocumentInsertionWriter w = (XmlDocumentInsertionWriter)InsertBefore(); // local variables to anonymous delegate XPathNavigator prev = Clone(); if (!prev.MoveToPrevious()) { prev = null; } XPathNavigator parentNav = Clone(); parentNav.MoveToParent(); w.Closed += delegate(XmlWriter writer) { XmlNode parent = start.ParentNode; XmlNode next; bool loop = true; for (XmlNode n = start; loop; n = next) { loop = n != end; next = n.NextSibling; parent.RemoveChild(n); } if (prev != null) { MoveTo(prev); MoveToNext(); } else { MoveTo(parentNav); MoveToFirstChild(); } }; return(w); }
public override XmlWriter ReplaceRange(XPathNavigator nav) { if (nav == null) { throw new ArgumentNullException(); } XmlNode start = ((IHasXmlNode)this.navigator).GetNode(); XmlNode end = null; if (nav is IHasXmlNode) { end = ((IHasXmlNode)nav).GetNode(); } if (end == null || start.ParentNode != end.ParentNode) { throw new InvalidOperationException("Argument XPathNavigator has different parent node."); } XmlDocumentInsertionWriter xmlDocumentInsertionWriter = (XmlDocumentInsertionWriter)this.InsertBefore(); XPathNavigator prev = this.Clone(); if (!prev.MoveToPrevious()) { prev = null; } XPathNavigator parentNav = this.Clone(); parentNav.MoveToParent(); xmlDocumentInsertionWriter.Closed += delegate(XmlWriter writer) { XmlNode parentNode = start.ParentNode; bool flag = true; XmlNode xmlNode = start; while (flag) { flag = (xmlNode != end); XmlNode nextSibling = xmlNode.NextSibling; parentNode.RemoveChild(xmlNode); xmlNode = nextSibling; } if (prev != null) { this.MoveTo(prev); this.MoveToNext(); } else { this.MoveTo(parentNav); this.MoveToFirstChild(); } }; return(xmlDocumentInsertionWriter); }