2014-09-10 31 views
1

所以我有这样的XML文件:新的孩子加入到现有的子

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<Project1> 
<Students> 
    <Student> 
    <name>test2</name> 
    <studentnum>01</studentnum> 
    </Student> 
</Students> 
</Project1> 
</root> 

要将新的学生加入到这个XML文件,我用这个代码(C#)

XmlDocument doc = new XmlDocument(); 
doc.Load(Server.MapPath("datastorage.xml")); 
XmlElement Student = doc.CreateElement("Student"); 

XmlElement name = doc.CreateElement("name"); 
XmlText xmlName = doc.CreateTextNode(txtStudentName1.Text); 

XmlElement studentnum = doc.CreateElement("studentnum"); 
XmlText xmlStudentnum = doc.CreateTextNode(txtStudentNum1.Text); 

name.AppendChild(xmlName); 
studentnum.AppendChild(xmlStudentnum); 

Student.AppendChild(name); 
Student.AppendChild(studentnum); 

doc.DocumentElement.AppendChild(Student); 

doc.Save(Server.MapPath("datastorage.xml")); 

但问题是,它为根添加了一个新学生,而不是Project1/Students的学生。 我该怎么做?

我已经看到了XmlTextWriter的解决方案,但是未在4.5包含了...

+0

'XmlTextWriter' is仍然在.NET 4.5中,但您应该使用'XmlWriter.Create()'而不是'new XmlTextWriter()'。而且,在大多数情况下,LINQ to XML更容易。 – 2014-09-10 18:55:31

回答

4

我发现使用LINQ to XML更容易

var xDoc = XDocument.Load(filename); 
xDoc.Descendants("Project1").Descendants("Students") 
    .First() 
    .Add(new XElement("Student", 
       new XElement("name","test3"), 
       new XElement("studentnum","03"))); 

xDoc.Save(filename); 

OUTPUT:

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <Project1> 
    <Students> 
     <Student> 
     <name>test2</name> 
     <studentnum>01</studentnum> 
     </Student> 
     <Student> 
     <name>test3</name> 
     <studentnum>03</studentnum> 
     </Student> 
    </Students> 
    </Project1> 
</root> 
+1

Thankyou为了更好地适合我的例子,我已经编辑了一些答案,因为我有一个''元素,稍后我将在这个XML文件中有更多的项目,所以我可以确保它将学生放入正确的项目 – CularBytes 2014-09-10 18:22:55

+1

@RageCompex然后,我会写它为'xDoc.XPathSelectElement(“// Project1/Students”)。Add(.....' – 2014-09-10 19:17:49

+0

也是一个选项,好点。 – CularBytes 2014-09-10 19:22:23

0

试试这个:

XmlNode studentsNode= doc.SelectSingleNode("Project1/Students"); 

studentsNode.AppendChild(Student); 
相关问题