日期:2014-05-17  浏览次数:20764 次

用C#删除XML中的一个节点的简单问题,请大家帮我想想办法
已知xml文件如下:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
</book>
<book genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
</book>
</bookstore>
删除 <book genre="李赞红" ISBN="2-3631-4">节点
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
    foreach(XmlNode xn in xnl)
    {
     XmlElement xe=(XmlElement)xn;
     if(xe.GetAttribute("genre")=="李赞红")
     {
      xe.RemoveAll();//删除该节点的全部内容
     }
    }
    xmlDoc.Save("bookstore.xml");
//===========================================
最后结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
</book>
<book>
</book>

</bookstore>

=============================================
我的问题是如何将那个剩下的
<book>
</book>
也一起删了?
xml 删除节点

------解决方案--------------------
修改如下试试
if (xe.GetAttribute("genre") == "李赞红")
                    {
                        xn.ParentNode.RemoveChild(xn);
                    }

------解决方案--------------------
public static void XmlNodeDelete(string xmlPath,string Node) 
{           
     XmlDocument objXmlDoc = new XmlDocument();            
     objXmlDoc.Load(xmlPath);  //xml路径          
     string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
     objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));  //删除节点路径          
     objXmlDoc.Save(xmlPath);        
}
------解决方案--------------------
写错了,,,

XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
xn.RemoveChild(xn.SelectSingleNode("book[@genre='李赞红']");