C# 将LINQ追加/列出到XML数据

C# 将LINQ追加/列出到XML数据,c#,xml,linq,C#,Xml,Linq,我目前正在编写一个函数,通过它来保存和读取数据到/从和XML文档 林克。目前我可以很好地编写文档,但是如果我向现有项添加数据,它只会添加一个新项。我的目标是创建一个地址簿类型的系统(是的,我知道有1000个,这只是我自己的一个学习项目),我尝试了ini和基本文本,但似乎XML是最好的方法,不使用像sql这样的本地数据库。目前我有: XDocument doc = XDocument.Load(@"C:\TextXML.xml"); var data = new XElement(

我目前正在编写一个函数,通过它来保存和读取数据到/从和XML文档 林克。目前我可以很好地编写文档,但是如果我向现有项添加数据,它只会添加一个新项。我的目标是创建一个地址簿类型的系统(是的,我知道有1000个,这只是我自己的一个学习项目),我尝试了ini和基本文本,但似乎XML是最好的方法,不使用像sql这样的本地数据库。目前我有:

    XDocument doc = XDocument.Load(@"C:\TextXML.xml");
    var data = new XElement("Entry",
    new XElement("Name", textBox1.Text),
    new XElement("Address", richTextBox2.Text),
    new XElement("Comments", richTextBox1.Text));
    doc.Element("Contacts").Add(data);
    doc.Save(@"C:\TextXML.xml");
我搜索了所以似乎找不到如何追加/替换。 现在,这可以正确地保存所有内容,即使在我添加到文档时也是如此,但是如果我想更新条目,我不知道如何在不创建新“条目的情况下进行更新,也不知道如何删除条目。(我对C有点陌生,仍然自学成才,所以请原谅我忽略了任何明显的事情。)

我的第二个问题是将信息加载到文本框中。 我可以将条目名称列表加载到列表框中,但当我打开该条目中的信息时,我不确定如何正确获取嵌套信息。 对于上面的示例,我需要类似于以下内容的内容:

XDocument doc = XDocument.Load(@"C:\TextXML.xml");
boxName.Text = The name from the SelectedItem of the list box.
boxAddress.Text = The address child of the element named above etc.
我尝试过的每个方法都会出现一个空引用异常,它告诉我我没有指向正确的对象,但我不确定如何正确地找到这些对象。
我还尝试从列表框中创建SelectedItem的字符串和var,以帮助命名,并使用ToString方法,但仍然无法找到答案。

要替换值,可以在XElement中使用几个函数:

Value (property with a public setter)
SetValue()
SetElementValue()
SetAttributeValue()
ReplaceWith()
ReplaceNodes()
例如,如果要替换名称中的值:

data.Element("Name").SetValue("NewValue");

对于加载,一旦拥有了所需的XElement节点,就可以简单地进行加载

xelement.Value
或者如果它是一个属性:

xelement.Attribute("AttributeName").Value
以您的代码为例:

boxName.Text = doc.Element("Entry").Element("Name").Value;
编辑以处理评论:

如果我读对了你的评论,你想从Contacts主节点中的所有节点提取姓名/地址/等数据吗

如果是这样的话,那么您可能会想要这样的东西:

boxName.Text = string.Join(",", doc.Elements("Entry").Select(x => x.Element("Name").Value));
这将为您提供一个字符串,其中所有条目中的所有名称都用逗号分隔。只需将“Name”改为“Address”,地址也可以这样做


我建议搜索Linq to XML以查找有关如何使用此解析的更多信息。

我似乎仍然无法正确定位节点,我要么获取notes联系人中的所有内容,要么获取其中的元素列表。我试图将联系人中的所有姓名都指向列表框,然后将其元素信息(姓名、地址等)发送到我拥有的文本框中。
boxName.Text = string.Join(",", doc.Elements("Entry").Select(x => x.Element("Name").Value));