2016-07-26 15 views
0

我有下面的XML。我想删除那些不包含属性的节点。在下面的XML我想删除最后4个没有属性的节点。如何从C#中的确切字符串匹配XML中删除节点#

XML

<products> 
    <product system="kn-movies" code="UR">Unrated</product> 
    <product system="mu-movies" code="UR">Unrated</product> 
    <product system="na-movies" code="UR">Unrated</product> 
    <product system="fj-movies" code="UR">Unrated</product> 
    <product>Unrated (Unrated)</product> 
    <product>Unrated (Unrated)</product> 
    <product>Unrated (Без классификации)</product> 
    <product>Unrated (غير مصنف)</product> 
</products> 

我试过此C#代码

var ratingNode = document.Descendants("rating").Where(t => t != null && t.Equals(Convert.ToString(nodeItem))).FirstOrDefault(); 
          if (ratingNode != null) 
          { 
           ratingNode.Remove(); 
          } 

但它并不适合我。请帮我解决犯错误的地方。

回答

1

希望这会做伎俩

XmlNodeList nodes = xmlDocument.GetElementsByTagName("products"); 
foreach(XmlNode node in nodes) 
{ 
    if(node.Attributes.Count == 0) 
    { 
     node.RemoveAll; 
    } 
} 
0

你可以使用它没有属性的元素LinqXml和查询,那么你只需要调用Remove删除这些元素。

XDocument doc = XDocument.Load(filepath);  
doc.Root 
    .Descendants()        // flattens the structure 
    .Where(x=> x.Attributes().Count() <= 0)  // filter elements which has no attributes 
    .Remove();         // Remove them 

入住这Demo

2
System.Xml.Linq.XDocument doc = System.Xml.Linq.XDocument.Load(filepath); 
var newList = doc.Root.Descendants().ToList().RemoveAll(x => x.Attributes() == null || x.Attributes().Count() <= 0); 

希望它可以帮助!