<?xml version="1.0" encoding="utf-8"?>
<SoftXML ProductID="E027E-27032-0D23F-B2D12-AB041" Version="4.0">
  <Menus>
    <Menu>
      <Name>文件</Name>
      <Menu>
        <Name>新建...</Name>
        <Menu>
          <Name>新建项目</Name>
        </Menu>
      </Menu>
      <Menu>
        <Name>打开项目(&amp;O)</Name>
      </Menu>
      <Menu>
        <Name>@-</Name>
      </Menu>
      <Menu>
        <Name>退出</Name>
      </Menu>
    </Menu>
  </Menus>
  <Menus>
    <Menu>
      <Name>帮助</Name>
      <Menu>
        <Name>关于</Name>
        <Menu>
          <Name>关于公司</Name>
        </Menu>
      </Menu>
      <Menu>
        <Name>快速上手</Name>
      </Menu>
      <Menu>
        <Name>@-</Name>
      </Menu>
      <Menu>
        <Name>案例演示</Name>
      </Menu>
    </Menu>
  </Menus>
</SoftXML>
我如何通过查找删除掉<Menus></Menus>这个节点。我写了段代码,但是删除后总留有一个<Menus></Menus>节点,并没有删干净!XmlNodeList list = doc.SelectNodes("//Menu//Name[.='文件']");
            if (list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    XmlElement el = (XmlElement)list[i];
                    if (el.InnerText.Trim().ToLower() == "文件")
                    {                        if (el.ParentNode != null && el.ParentNode.ParentNode != null)
                            el.ParentNode.ParentNode.RemoveChild(el.ParentNode);
                    }
                }            }
            doc.Save("D://SoftXML.xml"); 

解决方案 »

  1.   

     XmlNodeList list = doc.SelectNodes("//Menu//Name[.='文件']");
                if (list != null)
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        XmlElement el = (XmlElement)list[i];
                        if (el.InnerText.Trim().ToLower() == "文件")
                        {                        if (el.ParentNode != null && el.ParentNode.ParentNode != null)
                            {
                                XmlNode _ParentNode = el.ParentNode.ParentNode;
                                _ParentNode.RemoveChild(el.ParentNode);
                                if (_ParentNode.ChildNodes.Count == 0) _ParentNode.ParentNode.RemoveChild(_ParentNode);
                                
                            }
                        }
                    }            }
    ........自己多写写把
      

  2.   

    刚才给你写了代码你不仔细看
    XmlNode node = doc.SelectSingleNode("//Menu[Name[.='新建项目']]");//这个是获得Menu节点if (node != null && node.ParentNode != null)
    {
        node.ParentNode.RemoveChild(node);
    }如果你要删除Menus节点的话
    直接
    XmlNodeList list = doc.SelectSingleNode("//Menus");
    foreach(XmlNode node in list)
    {
        node.ParentNode.RemoveChild(node);
    }不知道你到底要干嘛,到底要删除什么,说清楚不管你删除什么节点,直接找到这个节点然后用ParentNode.RemoveChild就可以了
    不要循环的删除~~