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

标签 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>

例如,我必须删除所有 inode 和具有属性值=“72”的子节点。我怎样才能做到这一点?语言是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>

最佳答案

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>

关于c# - 如何根据父节点中的属性删除特定节点及其子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19759225/

相关文章:

c# - 如何在下拉列表中添加表字段的2列值

java - 使用 JavaScript 或 C# 检查客户端计算机上是否安装了 Java 应用程序(不是 JAVA!)

c# - 无法添加或更新子行 : a foreign key constraint fails - stops at 1 insertion

java - 如何将 XML 字符串添加到现有 BaseX 数据库?

c# - 在 C# 中,为什么在静态字段的初始化程序中允许循环依赖?

javascript - 正则表达式,选择其他文本中的一部分

xml - 存储 XML 文件的良好实践 - Express、MongoDB

xml - 如何将 XSD 文件转换为 XLS

c# - 用于选择具有特定值的特定节点的 XPath 字符串 c#

java - 如何防止将 XML 解析错误写入 System.err (stderr)?