添加子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);
}
有更好的方法吗?也许是一个更简单的检查?
您可能会使用通过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"
这会在比较之前将属性转换为字符串。