gpt4 book ai didi

c# - 我需要一个 LINQ 表达式来查找元素名称和属性与输入节点匹配的 XElement

转载 作者:数据小太阳 更新时间:2023-10-29 01:57:01 25 4
gpt4 key购买 nike

当元素名称以及所有属性名称和值与输入元素匹配时,我需要替换 XElement 层次结构中节点的内容。 (如果不匹配,可以添加新元素。)

例如,如果我的数据如下所示:

<root>
<thing1 a1="a" a2="b">one</thing1>
<thing2 a1="a" a2="a">two</thing2>
<thing2 a1="a" a3="b">three</thing2>
<thing2 a1="a">four</thing2>
<thing2 a1="a" a2="b">five</thing2>
<root>

当我使用此输入调用方法时,我想找到最后一个元素:

<thing2 a1="a" a2="b">new value</thing2>

该方法不应有硬编码的元素或属性名称 - 它只是将输入与数据匹配。

最佳答案

这将匹配任何给定的具有准确标签名称和属性名称/值对的元素:

public static void ReplaceOrAdd(this XElement source, XElement node)
{
var q = from x in source.Elements()
where x.Name == node.Name
&& x.Attributes().All(a =>node.Attributes().Any(b =>a.Name==b.Name && a.Value==b.Value))
select x;

var n = q.LastOrDefault();

if (n == null) source.Add(node);
else n.ReplaceWith(node);
}

var root = XElement.Parse(data);
var newElem =XElement.Parse("<thing2 a1=\"a\" a2=\"b\">new value</thing2>");

root.ReplaceOrAdd(newElem);

关于c# - 我需要一个 LINQ 表达式来查找元素名称和属性与输入节点匹配的 XElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/155685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com