关于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) 
ExpandedBlockStart.gifContractedBlock.gif  

    XmlElement xe
=(XmlElement)xn; 
    
if(xe.GetAttribute("genre")=="fantasy"
ExpandedSubBlockStart.gifContractedSubBlock.gif    

    xe.RemoveAttribute(
"genre");//删除genre属性 
    }
 
    
else if(xe.GetAttribute("genre")=="update陶维佳"
ExpandedSubBlockStart.gifContractedSubBlock.gif    

    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) 
ExpandedBlockStart.gif  

    XmlElement xe
=(XmlElement)xn; 
    
if(xe.GetAttribute("genre")=="fantasy"
ExpandedSubBlockStart.gif    

    xe.RemoveAttribute(
"genre");//删除genre属性 
    } 
    
else if(xe.GetAttribute("genre")=="update陶维佳"
ExpandedSubBlockStart.gif    

    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>  

  

转载于:https://www.cnblogs.com/liukai/archive/2009/11/22/1608265.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>