XmlDocument xd = new XmlDocument();
       xd.Load(pa);
       XmlNode xNode = xd.SelectSingleNode("/configuration/tabs/tab[@tabId='tab_0']/tabColumn_2/feeds");
       
       for (int i = 0; i < xNode.ChildNodes.Count; i++)
       {
           //xl.AppendChild(xNode.ChildNodes[i]);
           //throw new Exception(xNode.ChildNodes.Count.ToString());          
           XmlNode xl = xd.SelectSingleNode("/configuration/tabs/tab[@tabId='tab_0']/tabColumn_1/feeds");
           xl.AppendChild(xNode.ChildNodes[i]);
           Response.Write("r"+i);                         }
       xd.Save(pa);
我要把tabColumn_2/feeds 下面的所有节点移动到tabColumn_1/feeds下面
这循环只循环第一次  就不循环了,但是循环里面只放入Response.Write("r"+i);又可以正常循环。但是执行了节点插入 它就只循环一次!
各位帮忙看看什么问题

解决方案 »

  1.   

    for (int i =  xNode.ChildNodes.Count - 1; i > 0; i--)
    试试
    另外,看看节点结构是怎样的,这些都是内存操作,你移动了之后要保证你选择的未移动节点还存在
      

  2.   

    <tabColumn_1 width="30%">
            <feeds>
              
            </feeds>
          </tabColumn_1>
          <tabColumn_2 width="30%">
            <feeds>
              <feed feedId="feed_2">
                <feedIndexof>0</feedIndexof>
                <feedParentId>tab_0</feedParentId>
                <feedIcon>http://www.xxx.com/url/icn.jpg</feedIcon>
                <feedTitle>房产新闻</feedTitle>
                <feedType>0</feedType>
                <feedRssUrl>http://www.baidu.com/rss/rss.xml</feedRssUrl>
                <feedNewsShowNumber>10</feedNewsShowNumber>
                <feedNewsIsOpenSite>0</feedNewsIsOpenSite>
                <feedNewsIsPage>0</feedNewsIsPage>
                <feedNewsType>0</feedNewsType>
                <feedNewsNum>30</feedNewsNum>
                <feedReadAddress>http://www.168168888.com/subscribe.aspx?preconfig=288e7e8602124619d61a23672ffa80f3</feedReadAddress>
                <feedStyle>color:#000fff</feedStyle>
              </feed>
              <feed feedId="feed_5">
                <feedIndexof>0</feedIndexof>
                <feedParentId>tab_0</feedParentId>
                <feedIcon>http://www.xxx.com/url/icn.jpg</feedIcon>
                <feedTitle>房产新闻</feedTitle>
                <feedType>0</feedType>
                <feedRssUrl>http://www.baidu.com/rss/rss.xml</feedRssUrl>
                <feedNewsShowNumber>10</feedNewsShowNumber>
                <feedNewsIsOpenSite>0</feedNewsIsOpenSite>
                <feedNewsIsPage>0</feedNewsIsPage>
                <feedNewsType>0</feedNewsType>
                <feedNewsNum>30</feedNewsNum>
                <feedReadAddress>http://www.168168888.com/subscribe.aspx?preconfig=288e7e8602124619d61a23672ffa80f3</feedReadAddress>
                <feedStyle>color:#000fff</feedStyle>
              </feed>
            </feeds>
          </tabColumn_2>
      

  3.   

    for (int i =  xNode.ChildNodes.Count - 1; i > 0; i--)
    用这循环也只循环了一次,只是把feedId="feed_5"这节点移上到tabColumn_1去了
      

  4.   

    /configuration/tabs/tab[@tabId='tab_0']/tabColumn_2/feeds 的 ChildNodes.Count 等于几啊
      

  5.   

    这样
    string pa = Server.MapPath("1.xml");
    XmlDocument xd = new XmlDocument();
    xd.Load(pa);
    XmlNode xNode = xd.SelectSingleNode("/configuration/tabs/tab[@tabId='tab_0']/tabColumn_2/feeds");for (int i = xNode.ChildNodes.Count -1 ; i > -1 ; i--)
    {
      //throw new Exception(xNode.ChildNodes.Count.ToString());          
      XmlNode xl = xd.SelectSingleNode("/configuration/tabs/tab[@tabId='tab_0']/tabColumn_1/feeds");
      xl.AppendChild(xNode.ChildNodes[i]);    
    }Response.Write(xd.OuterXml);
    xd.Save( Server.MapPath("2.xml"));
      

  6.   

    for (int i =  xNode.ChildNodes.Count - 1; i > -1; i--)
    你原来的方法执行了xNode.ChildNodes[0]后,原来的第二个节点变成第一个了,xNode.ChildNodes[1]也就不存在了,所以循环了一次如果feed节点有10个,那么你原来的循环最多只能循环5次,
    就是这个原因造成的
      

  7.   

    简单的方法可以这样
    string pa = Server.MapPath("1.xml");
    XmlDocument xd = new XmlDocument();
    xd.Load(pa);
    XmlNode xNode = xd.SelectSingleNode("/configuration/tabs/tab[@tabId='tab_0']/tabColumn_2/feeds");
    XmlNode xl = xd.SelectSingleNode("/configuration/tabs/tab[@tabId='tab_0']/tabColumn_1/feeds");
    xl.InnerXml += xNode.InnerXml;
    //要删除原来的节点下面的一句加上
    //xNode.InnerXml = "";
    xd.Save( Server.MapPath("2.xml"));
      

  8.   

    要、保留原节点还可以采用xl.AppendChild(xNode.ChildNodes[i].CloneNode(true));