2014-09-10 3 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 намного проще в большинстве случаев. –

ответ

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); 

ВЫВОД:

<?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-файле, поэтому я могу убедиться, что он помещает Student в правильный проект – CularBytes

+1

@RageCompex Тогда я бы написал его как «xDoc.XPathSelectElement (« // Project1/Students »). Добавить (.....' –

+0

Также вариант, хорошая точка. – CularBytes

0

Попробуйте следующее:

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

studentsNode.AppendChild(Student); 
Смежные вопросы