读书人

用C#删除XML中的一个节点的简单有关问

发布时间: 2013-04-02 12:35:26 作者: rapoo

用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='李赞红']");



[解决办法]
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
List<XmlNode> delNodes = new List<XmlNode>();
foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="李赞红")
{
xe.RemoveAll();//删除该节点的全部内容
}
if(!xn.HasChildNodes){
delNodes.Add(xn);
}
}
foreach(XmlNode xn in delNodes){
xn .ParentNode.RemoveChild(xn );
}

读书人网 >C#

热点推荐