System.Xml.XmlElement GetServiceElement(string name, System.Xml.XmlNode serviceNode, System.Xml.XmlNode orderNode = null) { System.Xml.XmlNode node = null; foreach (System.Xml.XmlNode item in serviceNode.ChildNodes) { if (item.Name != name) { continue; } node = item; break; } if (node == null) { node = serviceNode.OwnerDocument.CreateElement(name, serviceNode.OwnerDocument.DocumentElement.NamespaceURI); if (orderNode == null) { serviceNode.AppendChild(node); } else { serviceNode.InsertAfter(node, orderNode); } } return((System.Xml.XmlElement)node); }
/// <summary> /// 将指定的菜单项下降一个位置。 /// </summary> /// <param name="ID">菜单项 ID。</param> public void SendMenuItemToBack(string ID) { System.Xml.XmlNodeList xnl = this.xmlDocument.SelectNodes("/Menu/MenuGroup/MenuItem"); foreach (System.Xml.XmlNode tmp in xnl) { if (tmp.Attributes["ID"] != null && tmp.Attributes["ID"].Value == ID) { System.Xml.XmlNode ParentNode = tmp.ParentNode; System.Xml.XmlNode NextSibling = tmp.NextSibling; if (NextSibling != null && NextSibling != null) { ParentNode.RemoveChild(tmp); ParentNode.InsertAfter(tmp, NextSibling); return; } } } }
/// <summary> /// Inserts the specified XML node at the specified position /// </summary> internal static bool InsertXmlNode(XmlCursorPos cursorPos, System.Xml.XmlNode node, XmlRules xmlRules, bool setNewCursorPosBehindNewInsertedNode) { System.Xml.XmlNode parentNode = cursorPos.ActualNode.ParentNode; switch (cursorPos.PosOnNode) { case XmlCursorPositions.CursorOnNodeStartTag: // replace the acual node case XmlCursorPositions.CursorOnNodeEndTag: parentNode.ReplaceChild(node, cursorPos.ActualNode); break; case XmlCursorPositions.CursorInFrontOfNode: // insert before actual node parentNode.InsertBefore(node, cursorPos.ActualNode); break; case XmlCursorPositions.CursorBehindTheNode: // insert after actual node parentNode.InsertAfter(node, cursorPos.ActualNode); break; case XmlCursorPositions.CursorInsideTheEmptyNode: // insert into empty node cursorPos.ActualNode.AppendChild(node); break; case XmlCursorPositions.CursorInsideTextNode: // insert into textnode // Make the text available as a node before the insertion position string textDavor = cursorPos.ActualNode.InnerText.Substring(0, cursorPos.PosInTextNode); System.Xml.XmlNode textDavorNode = parentNode.OwnerDocument.CreateTextNode(textDavor); // Provide the text behind the insert position as a node string textAfter = cursorPos.ActualNode.InnerText.Substring(cursorPos.PosInTextNode, cursorPos.ActualNode.InnerText.Length - cursorPos.PosInTextNode); System.Xml.XmlNode textAfterNode = parentNode.OwnerDocument.CreateTextNode(textAfter); // Insert the node to be inserted between the new before and after text node // -> so replace the old text node with // textbefore - newNode - textafter parentNode.ReplaceChild(textDavorNode, cursorPos.ActualNode); parentNode.InsertAfter(node, textDavorNode); parentNode.InsertAfter(textAfterNode, node); break; default: throw new ApplicationException(String.Format("InsertXmlNode: unknown PosOnNode {0}", cursorPos.PosOnNode)); } // set cursor if (setNewCursorPosBehindNewInsertedNode) { // Place cursor behind the new node cursorPos.SetPos(node, XmlCursorPositions.CursorBehindTheNode); } else { if (xmlRules.HasEndTag(node)) { // Place cursor in the new node cursorPos.SetPos(node, XmlCursorPositions.CursorInsideTheEmptyNode); } else { // Place cursor behind the new node cursorPos.SetPos(node, XmlCursorPositions.CursorBehindTheNode); } } return(true); }