关于xml删除节点的问题

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

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值