2014-09-10 47 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); 
相關問題