添加子Xelement(如果它不存在)

本文关键字:不存在 如果 Xelement 添加 | 更新日期: 2023-09-27 18:20:30

关于如何做到这一点,我几乎没有什么解决方案,但我想知道是否有一种巧妙的方法。

<Project>
    <Test>
        <Name value="zero">
        <Name value="One">
        <Name value="Two">
    </Test>
</Project>

现在,我可以访问testElement了。我想向它添加新的子XElement,只有当它不存在时。

我目前正在做的就是这个。这是我正在键入的唯一示例代码,与我正在做的代码相当,所以请原谅我的小错误。

XElement element = (from item
                    in testElement.Elements("name")
                    where item.Attribute("value") == "zero"
                    select item).SingleOrDefault();
if (element == null)
{
    testElement.add(newElement);
}

有更好的方法吗?也许是一个更简单的检查?

添加子Xelement(如果它不存在)

您可能会使用通过using System.Xml.XPath;提供的XPath扩展来避免冗长的LINQ,这是非常简单和容易的

示例

    XElement element = testElement.XPathSelectElement("Name[@value='zero']");
    if (element == null)
    {
        testElement.add(newElement);
    }

上面示例中的XPath Name[@value='zero']表示您正在查找一个名为Name的元素,该元素具有名为value的属性@,并且值为zero。因此问题中的linq被减少到单个CCD_ 7上,其余保持不变。

可选,这只是上面代码的重写

    if (testElement.XPathSelectElement("Name[@value='zero']") == null)
    {
        testElement.add(newElement);
    }

您正在将XAttribute与字符串进行比较,因此可能没有得到您想要的结果。

item.Attribute("value") == "zero"

尝试将其更改为:

(string)item.Attribute("value") == "zero"

这会在比较之前将属性转换为字符串。