C# 如果子元素不存在,则添加子元素
关于如何做到这一点,我几乎没有什么解决方案,但我想知道是否有一种简洁的方法可以做到这一点C# 如果子元素不存在,则添加子元素,c#,xml,linq,C#,Xml,Linq,关于如何做到这一点,我几乎没有什么解决方案,但我想知道是否有一种简洁的方法可以做到这一点 <Project> <Test> <Name value="zero"> <Name value="One"> <Name value="Two"> </Test> </Project> 有没有更好的办法?可能需要更简单的检查?您可能需要通过使用System.
<Project>
<Test>
<Name value="zero">
<Name value="One">
<Name value="Two">
</Test>
</Project>
有没有更好的办法?可能需要更简单的检查?您可能需要通过
使用System.Xml.XPath使用XPath扩展代码>为了避免冗长的LINQ,这非常简单
范例
XElement element = testElement.XPathSelectElement("Name[@value='zero']");
if (element == null)
{
testElement.add(newElement);
}
在上面的示例中,XPathName[@value='zero']
表示您正在查找名为Name
的元素,该元素的属性@
名为value
,值为zero
。因此,问题中的linq被简化为单个XPathSelectElement
,其余部分保持不变
可选,这只是对上述代码的重写
if (testElement.XPathSelectElement("Name[@value='zero']") == null)
{
testElement.add(newElement);
}
您正在将XAttribute
与字符串进行比较,因此可能没有得到想要的结果
item.Attribute("value") == "zero"
尝试将其更改为:
(string)item.Attribute("value") == "zero"
这将在比较之前将属性转换为字符串。如果xml无效,Name
节点未关闭testElement.Elements(“Name”).Any()
也可以。你想达到什么目的还不太清楚-如果不存在节点,你想添加节点吗?或者不存在具有确切属性的特定节点定义简洁的方法。L.B:我已经更新了这个问题。感谢您的关注。@user3606175您当前的代码是否正常工作,您是否正在寻求改进,或者您是否正在试图找出如何使其正常工作?目前它正常工作。我只是想也许我写了太多的代码,用简单的代码就可以实现。
(string)item.Attribute("value") == "zero"