Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编辑XML元素_C#_Xml - Fatal编程技术网

C# 编辑XML元素

C# 编辑XML元素,c#,xml,C#,Xml,我有以下xml <class> <whatever>Hi</whatever> </class> 它说:序列不包含任何元素 我在这个链接上找到了它: 有什么帮助吗? 谢谢大家! 使用XDocument(root)中的.Elements()将只查看直接子级。由于在本例中,which不是根元素,因此最终将得到一个空集合。在此空集合上调用.Single,将生成错误消息 private void button2_Click(o

我有以下xml

<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(“无论什么”)
不起作用。这里是您可能要查找的元素,而不是
元素。我将发布工作代码。很高兴看到它的帮助!如果您对其他解决方案感兴趣,我已经发布了一篇完整的文章。非常感谢,这非常有帮助。我将发布另一个问题,基本上是指同一个脚本