这是我第一次使用XML,我使用的基本XML文件格式如下:
<root>
<staff id="1">
<name>name 1</name>
<phone>123456</phone>
</staff>
<staff id="2">
<name>name 2</name>
<phone>123789</phone>
<phone2>123789</phone2>
</staff>
</root>
一些节点有更多的元素(在本例中为phone2)。我想在节点上添加(或删除)一个元素。我正在用C#创建一个使用此XML的WinForms。我正在做:
- 我读取XML以获得XmlNodeList变量。
- 从XmlNodeList中获取要修改为XmlNode变量的节点。
- 我在XmlNode上修改姓名或电话
- 我再次读取XML文件,并使用XmlNode变量new info更新正确的节点。
我的问题是我不知道如何在XmlNode变量上添加(或删除)元素“phone2”。
program.cs:
public static XmlNode staff;
public static XmlNodeList xnList = GetList();
public static XmlNodeList GetList()
{
XmlNodeList xnList;
XmlDocument doc = new XmlDocument();
doc.Load(path);
xnList = doc.SelectNodes("/root/staff");
return xnList;
}
public static void GetID(string id)
{
foreach (XmlNode xn in xnList)
{
if(xn.Attributes["id"].Value == id)
{
staff = xn;
}
}
}
form1.cs
private void btnOK_Click(object sender, EventArgs e)
{
Program.staff["name"].InnerText = textBoxName.Text;
Program.staff["phone"].InnerText = textBoxPhone.Text;
if (Program.staff.SelectSingleNode("phone2") == null)
{
// here I want to create "phone2" in Program.staff if not exist
// to update XML file later.
Program.staff["phone2"].InnerText = textBoxPhone2.Text;
}
}
我没有找到正确的方法来做这件事,也许这不是最好的方法,但我接受建议...
2条答案
按热度按时间7eumitmz1#
处理XML文件有多种方法,下面我将介绍两种方法。
测试.xml:
选项1(LINQ到XML):
使用指令添加以下内容:
using System.Xml.Linq;
创建XmlLinq:
用法:
要删除staff id = 2的电话号码
123458
,请执行以下操作:删除电话:
选项2(XML序列化):
对于这种方法,我们将使用嵌套类。
将以下using指令添加到每个类:
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
你可以随意命名类,我选择在前面加上“Xml”这个词。另外,对于嵌套类,我选择附加祖先的名字。在这个例子中,只有一个祖先(父)“root”。
XML根目录.cs:
XML根工作人员.cs:
要反序列化XML(从文件中读取),我们将使用以下方法:
将XML文件反序列化为对象:
用法(反序列化):
要序列化XML(写入文件),我们将使用以下方法:
将对象序列化为XML文件:
用法(序列化):
要删除staff id = 2的电话号码
123458
,请执行以下操作:资源:
sauutmhj2#
最后我解开了变化:
program.cs
form1.cs