xml文件如下:  
<Root>
<Modules>
    <Module ID="1" NAME="ksd" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="2" NAME="jf" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="js001" NAME="jf001" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="lj001" NAME="lj001" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="abc" NAME="abc.zip" VERSION="1.0.0.0" FTPPath="ftp://" />
  </Modules>
</Root>代码如下:
           XmlNodeList xnl = xmlDoc.SelectSingleNode("Root/Modules").ChildNodes;
            foreach (XmlNode xn in xnl)
            {
                string ID = xn.Attributes["ID"].InnerText;
                string VERSION = xn.Attributes["VERSION"].InnerText;
                if (ID.Equals("abc") && VERSION.Equals("1.0.0.0"))
                {
                    xn.RemoveAll();
                }
            }
删除之后xml
<Root>
  <Modules>
    <Module ID="1" NAME="ksd" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="2" NAME="jf" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="js001" NAME="jf001" VERSION="1.0.0.0" FTPPath="" />
    <Module ID="lj001" NAME="lj001" VERSION="1.0.0.0" FTPPath="" />
    <Module />
  </Modules>
</Root>为什么删除之后还有个  <Module />   求解决  !!!!!!!!!!!!

解决方案 »

  1.   

    RemoveAll();只是将属性根除,并没有删除自己
      

  2.   

      xmlDoc.SelectSingleNode("Root/Modules").RemoveChild(xn); 
      

  3.   


                     if (ID.Equals("abc") && VERSION.Equals("1.0.0.0"))
                    {
                        xn.ParentNode.RemoveChild(xn);
                    }
      

  4.   

    楼主的代码写得有点啰嗦,我改写一下:
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@"c:\test.xml");
    XmlNode deletedNode = xmlDoc.SelectSingleNode(@"/Root/Modules/Module[@ID='abc' and @VERSION='1.0.0.0']");
    deletedNode.ParentNode.RemoveChild(deletedNode);
    xmlDoc.Save(@"c:\result.xml");
      

  5.   

      foreach (XmlNode xn in xnl)
                {
                    string ID = xn.Attributes["ID"].InnerText;
                    string VERSION = xn.Attributes["VERSION"].InnerText;
                    if (ID.Equals("abc") && VERSION.Equals("1.0.0.0"))
                    {
                        xn.RemoveAll();
                    }
                }
    问题1 foreach 是只可访问的应该改成for
    问题2 xn.RemoveAll(); 是删除当前子节点的所有 应该改为 xnl.Remove(xn);
      

  6.   

     
    Quote: 引用 7 楼 happyer_longlong 的回复:

    问题1 foreach 是只可访问的应该改成for
    问题2 xn.RemoveAll(); 是删除当前子节点的所有 应该改为 xnl.Remove(xn);
     quote] xnl没有Romove方法。