2012-05-11 2 views
1

Я пытаюсь писать в xml программно.xml appenchild с различными значениями

В попытке достичь что-то вроде этого: -

<module> 
    <moduleCode>EIGA501</moduleCode> 
    <moduleTitle>Introduction to 3D Graphics</moduleTitle> 
    <credits>15</credits> 
    <semester>1</semester> 
    <assessmentDetails> 
    <assessment> 
     <assessmentName>Coursework1</assessmentName> 
     <assessmentType>Coursework</assessmentType> 
     <assessmentWeighting>25</assessmentWeighting> 
    </assessment> 
    <assessment> 
     <assessmentName>Coursework2</assessmentName> 
     <assessmentType>Coursework</assessmentType> 
     <assessmentWeighting>35</assessmentWeighting> 
    </assessment> 
    <assessment> 
     <assessmentName>Exam</assessmentName> 
     <assessmentType>Exam</assessmentType> 
     <assessmentWeighting>40</assessmentWeighting> 
    </assessment> 
    </assessmentDetails> 
    <school>ECS</school> 
</module> 

Где замечает узел assesmentDetails красиво отформатирован, я вместо того, чтобы достичь этого:

<module> 
    <moduleCode>someCode</moduleCode> 
    <moduleTitle>someCourseTitle</moduleTitle> 
    <credits>someCredits</credits> 
    <semester>2</semester> 
    <assesmentDetails> 
    <assesment> 
    </assesment> 
    <assesment> 
    </assesment> 
    <assesment> 
     <assesmentName>AssesmentName1AssesmentName2</assesmentName> 
     <assesmentType>AssesmentType1AssesmentType2</assesmentType> 
     <assesmentWeighting>12</assesmentWeighting> 
    </assesment> 
    </assesmentDetails> 
    <school>ECS</school> 
</module> 

Я успешно строю остальную часть xml fine, как вы можете видеть, я использую цикл for, чтобы попытаться построить раздел оценки «динамически». Как показано ниже:

for (int i = 0; i < textboxComputer.Count; i++) 
      { 
       XmlElement newAssesment = document.CreateElement("assesment"); 
       newAssesmentD.AppendChild(newAssesment); 

       TextBox tb1 = (TextBox)textboxComputer[i]; 
       TextBox tb2 = (TextBox)textboxP[i]; 
       TextBox tb3 = (TextBox)textboxPercent[i]; 

       XmlText assesmentN = document.CreateTextNode(tb1.Text); 
       XmlText assesmentT = document.CreateTextNode(tb2.Text); 
       XmlText assesmentW = document.CreateTextNode(tb3.Text); 

       newAssesment.AppendChild(newAssesmentN); 
       newAssesment.AppendChild(newAssesmentT); 
       newAssesment.AppendChild(newAssesmentW); 

       newAssesmentN.AppendChild(assesmentN); 
       newAssesmentT.AppendChild(assesmentT); 
       newAssesmentW.AppendChild(assesmentW); 
      } 

Любая помощь будет оценена!

+0

Является ли это домашнее задание? В настоящее время существует два разных пользователя с похожим xml. –

+0

При всем уважении, будь то «домашнее задание» или нет, это не имеет значения, это проект, над которым я работаю, и пришел в затруднительное положение. – aalsaleh

+0

домашняя работа должна быть помечена как таковая, это все. –

ответ

0

Если вы можете использовать LinqToXml, вы можете добавить узлы таким образом.

XElement a = new XElement("assesment"); 
a.Add(new XElement("assesmentName", "name text"); 

Вы можете найти assesmentDetails узел, как это,

XElement root = XElement.Load(file); 
XElement module = root.Elements("module") 
      .FirstOrDefault(x => x.Element("moduleCode").Value == "code"); 
if(null != module) 
{ 
    XElement assesmentDetails = module.Element("assesmentDetails"); 
    assesmentDetails.Add(a); // <-- Add your new assesment 
} 
+0

Спасибо за ваш ответ. Не могли бы вы предложить LinqToXml как единственное жизнеспособное решение? У меня очень мало опыта работы с Linq и я боюсь риска превратить свою работу в ящик с ошибкой! – aalsaleh

+0

LinqToXml проще в использовании, чем XmlElement. LinqToXml вышел с .Net 3.5 и XmlElement .Net 1.0 –

+0

Lambda's '=>' - самая сложная концепция Linq. '(a, b) => a + b' совпадает с' int f (int a, int b) {return a + b; } '. Компилятор обрабатывает тип переменных для вас. –

 Смежные вопросы

  • Нет связанных вопросов^_^