前面文章中提到 xml节点的删除
“删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update陶维佳" ISBN="2-3631-4">节点。”
代码:
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="fantasy")
{
xe.RemoveAttribute("genre");//删除genre属性
}
else if(xe.GetAttribute("genre")=="update陶维佳")
{
xe.RemoveAll();//删除该节点的全部内容
}
}
xmlDoc.Save("bookstore.xml");
这样的删除将不彻底,xml会变成:
最后结果为:
<?
xml version="1.0" encoding="gb2312"
?>
< bookstore >
< book ISBN ="2-3631-4" >
< title > Oberon's Legacy </ title >
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
< book >
</ book >
</ bookstore >
< bookstore >
< book ISBN ="2-3631-4" >
< title > Oberon's Legacy </ title >
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
< book >
</ book >
</ bookstore >
经过反复调试发现
要完整删除节点 也就是 说, 得通过 该节点的父节点 来删除. 也就是 你要 select 到 < bookstore > 这个节点 再用 这个节点 来 删除 < book > 即可.
代码
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="fantasy")
{
xe.RemoveAttribute("genre");//删除genre属性
}
else if(xe.GetAttribute("genre")=="update陶维佳")
{
xe.ParentNode.RemoveChild(xe);;//删除该节点的全部内容
}
}
xmlDoc.Save("bookstore.xml");
即可解决该问题 让xml文件变为
<? xml version="1.0" encoding="gb2312" ?>< bookstore >
< book ISBN ="2-3631-4" >
< title > Oberon's Legacy </ title >
< author > Corets, Eva </ author >
< price > 5.95 </ price >
</ book >
</bookstore>