[C#]从 Linq 的 xml 列表中移除项

标签: Linq XML C#
发布时间: 2017/2/27 3:43:39
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有下面的 xml 文件︰

<ArrayOfNO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <No>
    <Id>0</Id>
    <Name>txt_0</Name>
    <Texto>Função 0</Texto>
    <Txt_relacionados>
       <string>txt_1</string>
       <string>txt_2</string>
    </Txt_relacionados>
    <Nível>2</Nível>
    <X>393</X>
    <Y>55</Y>
</No>
<No>
    <Id>0</Id>
    <Name>txt_1</Name>
    <Texto>Função 0</Texto>
    <Txt_relacionados>
       <string>txt_0</string>
    </Txt_relacionados>
    <Nível>1</Nível>
    <X>234</X>
    <Y>115</Y>
</No>
<No>
  <Id>1</Id>
  <Name>txt_2</Name>
  <Texto>Função 1</Texto>
  <Txt_relacionados>
    <string>txt_0</string>
  </Txt_relacionados>
  <Nível>1</Nível>
  <X>234</X>
  <Y>115</Y>
</No>
</ArrayOfNO>

我希望当移除元素 ( "txt2" 为例),程序寻求在 <Txt_relacionados> 的所有元素,以检查是否任何项目与有关 "txt_2" ,如果真正删除。

我已删除了与下面的代码 (它工作) 项︰

public void remove(String name)
    {
        RefreshXDoc();
        var oEmp = doc.Descendants().Elements("No")
            .Where(d => d.Element("Name").Value == name)
            .FirstOrDefault();

        if (oEmp == null)
        {
            return;
        }

        oEmp.Remove();
        SaveXDoc();
    }

但首先需要删除所有项从列表中"txt_relacionados"与它相关的其他元素 (不知道如何来实现)。我试过这样的事情︰

var oEmp = doc.Descendants("No").Elements("Txt_relacionados")
            .Where(d => d.Element("string").Value == name)
            .ToList();
        oEmp.Remove();

        SaveXDoc();

任何人都有建议吗? 谢谢你 !

解决方法 1:

你可以尝试这种方式来删除所有 <string> 内的元素 <Txt_relacionados> 有价值等于 name :

doc.Descendants("No")
    .Elements("Txt_relacionados")
    .Elements("string")
    .Where(s => (string)s == name)
    .Remove();

SaveXDoc();

没有必要为 ToList() 在这里,你可以只是调用扩展方法 .Remove() 直接自该方法定义为 IEnumerable<XNode>

赞助商