【问题标题】:Linq to XML delete parent nodeLinq to XML 删除父节点
【发布时间】:2017-10-27 16:12:06
【问题描述】:

我正在尝试从 XML 中的元素中删除父级。

我的 XML:

<root>
<Element1 ManagementID="10" />
<Users>
    <UserID ManagementID="10">
        <Identification IDValue="1" />
        <!-- More elements Here -->
    </UserID>
</Users>
<!-- More Users elements Here -->

我发现我的用户是我的 IDValue:

XElement user = (from el in document.Root.Elements("Users").Elements("UserID ").Elements("Identification")
                   where (string)el.Attribute("IDValue") == myID
                   select el).FirstOrDefault();

现在,我想删除所有 user.Parent.Parent 我的意思是删除元素:

<Users>
    <UserID ManagementID="10">
        <Identification IDValue="1" />
        <!-- More elements Here -->
    </UserID>
</Users>

** 我会有很多用户元素,这就是为什么我首先寻找标识 IDValue

我找到了适合需要它的人的解决方案: 我已经从我的 linq 中获得了节点,所以

user.Parent.Parent.Remove()

【问题讨论】:

  • 请查看 Parent.Parent 下的 XML。我放了一个例子
  • 我想删除元素 。我的查询发现元素 其父元素是 。那么它的父级是。对不起,这就是我所说的 Parent.Parent

标签: c# xml linq-to-xml


【解决方案1】:
var user = document.Root
        .XPathSelectElements("//UserId")
        .FirstOrDefault(userId => userId.Element("Identification").Attribute(XName.Get("IDValue")).Value == myID);

【讨论】:

  • 我收到消息 XDocument 不包含 XPathSelectElements 的定义
  • 你确定吗? XDocument.Root 是 XDoc 的根 XElement,我盯着 Intellisense 验证的代码。
  • Proof你确定你使用的是最新的代码更新吗?
【解决方案2】:

试试这个:

            List<XElement> users = document.Descendants("Users")
                .Where(user => user.Elements("Identification")
              .Where(el => (string)el.Attribute("IDValue") != myID)
              .Any()).ToList();

           XElement element1 = document.Descendants("Element1").FirstOrDefault();
           element1.ReplaceNodes(users);

【讨论】:

  • 我认为它不会删除节点
  • 旧代码只是让用户保留。现在更新了要替换的代码。
  • 我明白了,但我正在寻找 Remove() 节点
  • 我所做的是过滤没有所需 id 的行。然后替换为过滤后的列表。所以 id 被过滤器移除了。
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
相关资源
最近更新 更多