如何根据父节点中的属性删除特定节点及其子节点?

时间:2013-11-03 22:55:22

标签: c# xml

首先,抱歉我的英语不好,我还在学习。所以,我必须根据属性删除xml文件的特定节点。这是xml文件:

<?xml version="1.0" encoding="utf-8"?>
<Lista>
  <Indice value="8">
    <Palavra value="casa" />
    <Significados>s1,,,,</Significados>
  </Indice>
  <Indice value="49">
    <Palavra value="teste" />
    <Significados>1,2,,,</Significados>
  </Indice>
  <Indice value="72">
    <Palavra value="cristiano" />
    <Significados>ornelas,ribeiro,,,</Significados>
  </Indice>
  <Indice value="72">
    <Palavra value="teste2" />
    <Significados>s2,s3,,,</Significados>
  </Indice>
</Lista>

我必须删除所有具有属性值=“72”的Indice节点和您的子节点。我怎样才能做到这一点?语言是c#,删除后的xml文件必须保持这种形式:

<?xml version="1.0" encoding="utf-8"?>
<Lista>
  <Indice value="8">
    <Palavra value="casa" />
    <Significados>s1,,,,</Significados>
  </Indice>
  <Indice value="49">
    <Palavra value="teste" />
    <Significados>1,2,,,</Significados>
  </Indice>     
</Lista>

2 个答案:

答案 0 :(得分:2)

XDocument xdoc=XDocument.Parse(xmlStr); //or XDocument.Load

var matchingElements = xdoc.Root
                        .Descendants("Indice")
                        .Where(e => (int)e.Attribute("value") == 72)
                        .ToList();
foreach(var elem in matchingElements)
{
    elem.Remove();
}

xdoc.Save(newFileName);

保存以下文档:

<Lista>
  <Indice value="8">
    <Palavra value="casa" />
    <Significados>s1,,,,</Significados>
  </Indice>
  <Indice value="49">
    <Palavra value="teste" />
    <Significados>1,2,,,</Significados>
  </Indice>
</Lista>

答案 1 :(得分:0)

这是Spender的另一种选择,尽管如果他的作品他应该回答问题。

        XmlDocument doc = new XmlDocument();
        doc.Load("xml path");
        XmlNode node = doc.SelectSingleNode("/Lista");
        foreach (XmlNode nodes in node.SelectNodes("Indice/@value"))
        {

            if (nodes.Value == "72")
            {
                nodes.RemoveAll();
            }
        }