C# 编辑XML元素
我有以下xmlC# 编辑XML元素,c#,xml,C#,Xml,我有以下xml <class> <whatever>Hi</whatever> </class> 它说:序列不包含任何元素 我在这个链接上找到了它: 有什么帮助吗? 谢谢大家! 使用XDocument(root)中的.Elements()将只查看直接子级。由于在本例中,which不是根元素,因此最终将得到一个空集合。在此空集合上调用.Single,将生成错误消息 private void button2_Click(o
<class>
<whatever>Hi</whatever>
</class>
它说:序列不包含任何元素
我在这个链接上找到了它:
有什么帮助吗?
谢谢大家! 使用XDocument(root)中的.Elements()
将只查看直接子级。由于在本例中,which
不是根元素,因此最终将得到一个空集合。在此空集合上调用.Single
,将生成错误消息
private void button2_Click(object sender, EventArgs e)
{
XDocument xdoc = XDocument.Load("NeueKlasse1.xml");
var element = xdoc.Descendants("whatever")?.SingleOrDefault();
element.Value = "freude";
xdoc.Save("NeueKlasse1.xml");
}
虽然null检查结果最终会停止错误,但它们不会完成您所追求的操作
一些可能的修复方法包括使用匹配任何深度的所有子项,然后选择第一个,或者直接导航到任何
。对于简单的XML,这两种方法都可以使用,在应用程序和模式的上下文中,由您决定哪一种“更好”
var element = xdoc.Element("class").Element("whatever");
所有后代:
var element = xdoc.Descendants("whatever").Single();
如果不存在一个which
元素,则会抛出该命令。另一种选择是直接导航,如果您知道模式中的确切路径
var element = xdoc.Element("class").Element("whatever");
(注意不要使用.Single
)
第三个选项是选择使用XPath,在本例中非常简单:
var element = xdoc.XPathSelectElement("class/whatever");
这意味着
xdoc.Elements(“无论什么”)
不起作用。这里是您可能要查找的元素,而不是元素。我将发布工作代码。很高兴看到它的帮助!如果您对其他解决方案感兴趣,我已经发布了一篇完整的文章。非常感谢,这非常有帮助。我将发布另一个问题,基本上是指同一个脚本