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);又可以正常循环。但是执行了节点插入 它就只循环一次!
各位帮忙看看什么问题
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);又可以正常循环。但是执行了节点插入 它就只循环一次!
各位帮忙看看什么问题
试试
另外,看看节点结构是怎样的,这些都是内存操作,你移动了之后要保证你选择的未移动节点还存在
<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>
用这循环也只循环了一次,只是把feedId="feed_5"这节点移上到tabColumn_1去了
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"));
你原来的方法执行了xNode.ChildNodes[0]后,原来的第二个节点变成第一个了,xNode.ChildNodes[1]也就不存在了,所以循环了一次如果feed节点有10个,那么你原来的循环最多只能循环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");
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"));