<?xml version="1.0" encoding="UTF-8"?>
<MyProject>
  <ConfigVer version="2.0">
  </ConfigVer>
  <Project name="xml" dir="">
    <Suit name="test" runlevel="0">
      <Script dir="hello" dur="1" logtype="0" Enabled="true" />
      <Script dir="hi" dur="1" logtype="0" Enabled="true" />
      <Script dir="who" dur="1" logtype="0" Enabled="true" />
    </Suit>
  </Project>
</MyProject>我需要删除其中<Script dir="hi" dur="1" logtype="0" Enabled="true" />全部内容,应该怎么做!?
我的方法
foreach(XmlNode st in XXXX)
{if (ss.Attributes["dir"].InnerText=="hello"){}
else        
{ss.removeall();}
}被删除的行都会留下Script,这是为什么呀?!应该怎么搞才能把这一行全部删掉呀。。急急!!!
谢谢了!!!

解决方案 »

  1.   

    你要用父结点的RemoveChild,而且不能在foreach中,要用for倒序循环。
    removeall是删除当前结点的属性和字节点
      

  2.   

    lz 好像不是使用 XML DOM 操作 XML 的,否多贴的代码?
    如果使用 XML DOM ,那么可以定位到 Suit 是否 使用 selectNodes 带条件选择你要删除的子元素,之后循环 removeChild 。
      

  3.   

    你看看这个对么?我自己试了一下,可以删除你要删除的<Script>节点
    public void OperatorXmlFile()
                {
                    string XmlPath = @"D:\PSPLab\ZONE\winapp\winapp\Data\source.xml";
                    XmlDocument xdoc = new XmlDocument();
                    xdoc.Load(XmlPath);                XmlNode xnode = xdoc.SelectSingleNode("MyProject/Project");
                    foreach (XmlNode xsubnode in xnode)
                    {
                        if (xsubnode.HasChildNodes == true)
                        {
                            foreach (XmlNode xn in xsubnode)
                            {
                                if (xn.Attributes["dir"].Value == "hello")
                                {
                                    xsubnode.RemoveChild(xn);
                                }
                            }
                        }
                    }
                }
      

  4.   

    XmlDocument doc = new XmlDocument();
    doc.Load(filePath);
    XmlNode node = doc.SelecetSingleNode("/MyProject/Project/Suit/Script[@dir='hi']");
    node.Parent.RemoveChild(node);
    doc.Save(filePath);