关于如何做到这一点我没有什么解决方案,但我想知道是否有一种巧妙的方法来做到这一点。
<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);
}
有更好的方法吗?也许更简单的检查?
答案 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"
这会在比较之前将属性转换为字符串。