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

时间:2014-09-03 22:00:16

标签: c# xml linq

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

<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);
}

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

2 个答案:

答案 0 :(得分:1)

您可能可以使用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,其值为{{1 }}。所以问题中的linq减少到单个zero并且其余部分保持不变。

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

XPathSelectElement

答案 1 :(得分:0)

您正在将XAttribute与字符串进行比较,因此您可能无法获得所需的结果。

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

尝试将其更改为:

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

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