xml大致结构如下:
原文如下
<?xml version="1.0" encoding="gb2312"?>
<toolbox>
  <菜单1 backcol="r红色"  text="图像工具" textfont="宋体"        textsize="12" />
  <菜单2 backcol="蓝色"   text="视频工具" textfont="微软雅黑"    textsize="13" />
  <菜单3 backcol="绿色"   text="网络工具" textfont="楷体"        textsize="14" />
</toolbox>
现希望删除
 <菜单2 backcol="蓝色"   text="视频工具" textfont="微软雅黑"    textsize="13" />
 节点结果如下:
<?xml version="1.0" encoding="gb2312"?>
<toolbox>
  <菜单1 backcol="r红色"  text="图像工具" textfont="宋体"        textsize="12" />
  <菜单2 backcol="绿色"   text="网络工具" textfont="楷体"        textsize="14" />
</toolbox>
实际上就是完成删除前一项后,后续项都改名为前一项名字的功能。
三种方案:
1。先删除<菜单2 backcol="蓝色"   text="视频工具" textfont="微软雅黑"    textsize="13" />
然后将节点“菜单3”改名为“菜单2”,这种方法感觉操作较少,最乐意采纳,但不会实现。
2。将“菜单3”的各项属性陆续传递给“菜单2”,这样操作太多,不太喜欢。
3。文本替换,不知效率如何,大家可发表意见。除此三种方法,不知大家可有更好的办法?

解决方案 »

  1.   

    XmlDocument doc= new XmlDocument();
    doc.Load("");
    XmlNode no= doc.SelectSingleNode("//toolbox/菜单2[@backcol='']");   
    if(no!=null)
    {
    XmlElement xe=(XmlElement)no;  
    xe.RemoveAll();
    }http://topic.csdn.net/u/20090515/12/619c10d1-af12-4c90-bfcd-101da5dd8ddf.html
      

  2.   

    你这样是自找麻烦,XML的构架设计要合理点。你在程序中需要的菜单1、菜单2可以根据节点的索引来获取。 
    获取是将菜单1作为属性,删除后更改其后所有节点的属性。
    <toolbox>
    <menus>
    <menu  backcol="r红色" text="图像工具" textfont="宋体" textsize="12" />
    <menu  backcol="蓝色" text="视频工具" textfont="微软雅黑" textsize="13" />
    <menu  backcol="绿色" text="网络工具" textfont="楷体" textsize="14" />
    </menus>
    </toolbox>如果你非要改节点的Name,保存时用XmlTextWriter来写入。
      

  3.   

    你这样是自找麻烦,XML的构架设计要合理点。你在程序中需要的菜单1、菜单2可以根据节点的索引来获取。 
    或者是将菜单1作为属性,删除后更改其后所有节点的属性。
    <toolbox>
    <menus>
    <menu backcol="r红色" text="图像工具" textfont="宋体" textsize="12" />
    <menu backcol="蓝色" text="视频工具" tex……获取  打错了字 
      

  4.   

    方法是有的,而且应有多种,用 ReplaceNode()、ReplaceAll() 等也能实现,不过这并不是问题的关键,问题的关键是在于你的这个设计是完全不合理的。支持3楼、4楼的说法,这才是正确的设计方式。
      

  5.   


      XmlDocument xmlDt= new XmlDocument();
      xmlDt.Load("XML文件名");
      XmlNode nodes= doc.SelectSingleNode("//toolbox/菜单2[@backcol='']");   
      if(nodes!=null)
      {
      XmlElement xml=no as XmlElement);   
      xml.RemoveAll();
      }