编辑XML元素

时间:2017-09-11 18:53:22

标签: c# xml

我有以下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");
    }

它说:序列不包含任何元素......

我在这个链接上找到了它:

example

任何帮助? 谢谢!

2 个答案:

答案 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");