如何在c#中使用精确字符串匹配从XML中删除节点

时间:2016-07-26 04:14:43

标签: c# xml

我的xml以下。我想删除那些不包含属性的节点。在xml以下我想删除最后4个没有属性的节点。

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();
                            }

但它对我不起作用。请帮我解决我在哪里犯错误。

3 个答案:

答案 0 :(得分: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);

希望它有所帮助!!

答案 1 :(得分:1)

希望这会成功

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

答案 2 :(得分:0)

您可以Linq使用Xml并查询没有属性的元素,然后只需要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