XML DOM 添加节点appendChild()方法向已存在的节点添加子节点,新节点会添加(追加)到任何已存在的子节点之后。
但是我现在想让新添加的子节点在已存在的子节点之前,但是也没有这样的方法,我该如何实现。例如京东的拍卖功能:http://auction.360buy.com/PaiMai.aspx?Pid=2056038&wid=250299
他是如何实现的?

解决方案 »

  1.   


    // 摘要:
            //     将指定的节点紧接着插入指定的引用节点之后。
            //
            // 参数:
            //   newChild:
            //     要插入的 XmlNode。
            //
            //   refChild:
            //     XmlNode,它是引用节点。newNode 放置在 refNode 之后。
            //
            // 返回结果:
            //     插入的节点。
            //
            // 异常:
            //   System.InvalidOperationException:
            //     此节点的类型不允许 newChild 节点类型的子节点。newChild 是此节点的上级节点。
            //
            //   System.ArgumentException:
            //     newChild 是从不同于创建此节点的文档创建的。refChild 不是此节点的子级。该节点是只读的。
            public virtual XmlNode InsertAfter(XmlNode newChild, XmlNode refChild);// 摘要:
            //     将指定的节点紧接着插入指定的引用节点之前。
            //
            // 参数:
            //   newChild:
            //     要插入的 XmlNode。
            //
            //   refChild:
            //     XmlNode,它是引用节点。newChild 放置在该节点之前。
            //
            // 返回结果:
            //     插入的节点。
            //
            // 异常:
            //   System.InvalidOperationException:
            //     当前节点的类型不允许 newChild 节点类型的子节点。newChild 是此节点的上级节点。
            //
            //   System.ArgumentException:
            //     newChild 是从不同于创建此节点的文档创建的。refChild 不是此节点的子级。该节点是只读的。
            public virtual XmlNode InsertBefore(XmlNode newChild, XmlNode refChild);// 摘要:
            //     将指定的节点添加到该节点的子节点列表的开头。
            //
            // 参数:
            //   newChild:
            //     要添加的节点。将要添加的节点的全部内容移动到指定位置。
            //
            // 返回结果:
            //     添加的节点。
            //
            // 异常:
            //   System.InvalidOperationException:
            //     此节点的类型不允许 newChild 节点类型的子节点。newChild 是此节点的上级节点。
            //
            //   System.ArgumentException:
            //     newChild 是从不同于创建此节点的文档创建的。该节点是只读的。
            public virtual XmlNode PrependChild(XmlNode newChild);
      

  2.   

    比如你有个节点XmlNode node1
    下边有个子节点XmlNode node1_1,
    你还有个XmlNode node,想添加到node1中,
    如果想放在node1_1前边,就是node1.InsertBefore(node,node1_1)
    如果想放在node1_1后边,就是node1.InsertAfter(node,node1_1)
    如果想放在node1最前边,就是node1.PrependChild(node1)
    如果想放在node1最后边,就是node1.AppendChild(node1)
      

  3.   

    如果是html的话,可用insertAdjacentHTML
    http://blog.csdn.net/qiang218/archive/2007/08/08/1731842.aspx
      

  4.   

    给你参考下
            #region xmlRW        /// <summary>
            /// 插入布局脚本
            /// </summary>
            /// <param name="tagID">要插入的tagID</param>
            /// <param name="insertContent">插入内容</param>
            /// <param name="order">顺序</param>
            /// <param name="strHtml">脚本</param>
            /// <returns></returns>
            public static string InsertToTag(string tagID, string insertContent, int order, string strHtml) {
                XmlDocument xmldoctmp = new XmlDocument();
                xmldoctmp.LoadXml(strHtml);
                XmlElement rootNode = xmldoctmp.DocumentElement;
                bool isLoad = false;
                if (rootNode != null) {
                    XmlNodeList subNodes = rootNode.ChildNodes;                foreach (XmlNode trNode in subNodes) {
                        XmlNodeList childNodes = trNode.ChildNodes;
                        foreach (XmlNode tdNode in childNodes) {
                            if (tdNode.Attributes["id"].Value == tagID) {
                                isLoad = true;
                                if (tdNode.ChildNodes.Count > 0) {
                                    string nodeText = "";
                                    if (order == 0) {
                                        nodeText += insertContent;
                                        foreach (XmlNode tdchNode in tdNode.ChildNodes) {
                                            nodeText += tdchNode.OuterXml;
                                        }
                                    }
                                    else if (tdNode.ChildNodes.Count > order) {
                                        for (int i = 0; i < order; i++) {
                                            nodeText += tdNode.ChildNodes[i].OuterXml;
                                        }
                                        nodeText += insertContent;
                                        for (int i = order; i < tdNode.ChildNodes.Count; i++) {
                                            nodeText += tdNode.ChildNodes[i].OuterXml;
                                        }
                                    }
                                    else if (tdNode.ChildNodes.Count <= order) {
                                        foreach (XmlNode tdchNode in tdNode.ChildNodes) {
                                            nodeText += tdchNode.OuterXml;
                                        }
                                        nodeText += insertContent;
                                    }                                tdNode.InnerXml = nodeText;
                                }
                                else
                                    tdNode.InnerXml = tdNode.InnerXml + insertContent;
                            }
                        }
                    }
                    //没有找到对应的区域,则插入最后一个
                    if (!isLoad) {
                        XmlNode lastNode;
                        if (subNodes.Count > 0) {
                            lastNode = subNodes[subNodes.Count - 1];
                            if (lastNode.ChildNodes.Count > 0) {
                                lastNode = lastNode.ChildNodes[lastNode.ChildNodes.Count - 1];
                                lastNode.InnerXml += insertContent;
                            }
                        }
                    }
                }            return rootNode.OuterXml;
            }        #endregion
      

  5.   

    firefox兼容的话,需要插入以下代码if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement)
    {
         HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
         {
            switch (where)
            {
                case 'beforeBegin':
                    this.parentNode.insertBefore(parsedNode,this)
                    break;
                case 'afterBegin':
                    this.insertBefore(parsedNode,this.firstChild);
                    break;
                case 'beforeEnd':
                    this.appendChild(parsedNode);
                    break;
                case 'afterEnd':
                    if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
                        else this.parentNode.appendChild(parsedNode);
                    break;
             }
         }     HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr)
         {
             var r = this.ownerDocument.createRange();
             r.setStartBefore(this);
             var parsedHTML = r.createContextualFragment(htmlStr);
             this.insertAdjacentElement(where,parsedHTML)
         }     HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
         {
             var parsedText = document.createTextNode(txtStr)
             this.insertAdjacentElement(where,parsedText)
         }
    }