将节点追加到XML文件

时间:2018-12-13 00:08:50

标签: c#

我有一个包含学校元素的XML文件。

    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(ConfigurationManager.AppSettings.Get("studentFile"));
        XmlNode student = xmlDoc.CreateElement("Student");
        XmlNode name = xmlDoc.CreateElement("Name");
        name.InnerText = tBName.Text;
        student.AppendChild(name);
        XmlNode grade = xmlDoc.CreateElement("Grade");
        grade.InnerText = tBGrade.Text;
        student.AppendChild(grade);
        XmlNode sex = xmlDoc.CreateElement("Sex");
        sex.InnerText = tbSex.Text;
        student.AppendChild(sex);
        XmlNode age = xmlDoc.CreateElement("Age");
        age.InnerText = tBAge.Text;
        student.AppendChild(age);
        XmlNode picture = xmlDoc.CreateElement("Picture");
        picture.InnerText = tBPicture.Text;
        student.AppendChild(picture);


        xmlDoc.DocumentElement.AppendChild(student);
        xmlDoc.Save(ConfigurationManager.AppSettings.Get("studentFile"));
    }

我想随同Windows窗体一起添加其他学生。这是我的代码。目前,它们是在“课堂”标记之后添加的,我希望在“学生”节点中添加它们。

kubectl

2 个答案:

答案 0 :(得分:1)

您可以找到“学生”节点

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ConfigurationManager.AppSettings.Get("studentFile"));
XmlElement root = xmlDoc.DocumentElement;
XmlNode node = root.SelectSingleNode("//Classrooms/Classroom/Students");

然后最后,您可以将新节点附加到该节点上

node.AppendChild(student);
//xmlDoc.DocumentElement.AppendChild(student);
xmlDoc.Save(ConfigurationManager.AppSettings.Get("studentFile"));

答案 1 :(得分:1)

使用LinqtoXml,这很容易做到。强烈建议使用Linq To XmL

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/adding-elements-attributes-and-nodes-to-an-xml-tree

try
{
    XDocument xmlDoc = XDocument.Load("StudentDoc.xml"));
    xmlDoc.Element("Students").Add(
    new XElement("Student", 
    new XElement("Name", "Peter"),
    new XElement("Grade", 10.0), 
    new XElement("Sex", "Male")));

    xmlDoc.Save("StudentDoc.xml"));
}
catch{}

然后您可以执行不同的操作,例如排序:

IEnumerable<decimal> names =  
    from student in root.Elements("Students")  
    orderby student.Name  
    select student.Name;  
foreach (string name in names)  
    Console.WriteLine(name);