关于xml删除节点的问题

来源:互联网 发布:c语言趣味编程 编辑:程序博客网 时间:2024/06/05 05:04

前面文章中提到 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> 

 

 经过反复调试发现

要完整删除节点 也就是 说, 得通过 该节点的父节点 来删除. 也就是 你要 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>