我有以下xml
<class>
<whatever>Hi</whatever>
</class>
使用以下代码更改元素值:
private void button2_Click(object sender, EventArgs e)
{
XDocument xdoc = XDocument.Load("NeueKlasse1.xml");
var element = xdoc.Elements("whatever").Single();
element.Value = "freude";
xdoc.Save("NeueKlasse1.xml");
}
它说:序列不包含任何元素......
我在这个链接上找到了它:
任何帮助? 谢谢!
答案 0 :(得分:1)
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");
}
答案 1 :(得分:0)
使用XDocument(root)中的.Elements()
将仅查看直接子项。由于whatever
在这种情况下不是根元素,因此最终会得到一个空集合。在此空集合上调用.Single
会产生错误消息。
虽然对结果进行空值检查最终会阻止错误,但它们最终不会完成你所追求的目标。
一些可能的修复方法包括使用.Descendants
匹配任何深度的所有孩子,然后选择第一个孩子,或直接导航到whatever
。对于简单的XML,两者都可以工作,由您来决定在应用程序和架构的上下文中哪个“更好”。
所有后代:
var element = xdoc.Descendants("whatever").Single();
如果没有一个whatever
元素,则会抛出。另一个选择是直接导航,如果您知道模式中的确切路径。
var element = xdoc.Element("class").Element("whatever");
(注意不使用.Single
)。
第三种选择是选择使用XPath,在这种情况下非常简单:
var element = xdoc.XPathSelectElement("class/whatever");