2012-05-11 2 views
1

프로그래밍 방식으로 xml에 쓰려고합니다. 이런 식으로 뭔가를 달성하기 위해 시도에서다른 값을 가진 xml appenchild

는 : -

assesmentDetails 노드가 아름답게 포맷주의 사항
<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> 

, 내가 대신을 달성하고있다 :

<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을 잘, 나는 '동적'assesment 섹션을 구축하려고 루프를 사용하고 있습니다. 표시된 바와 같이 :

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의'=>'는 Linq의 가장 어려운 개념입니다. '(a, b) => a + b'는'int f (int a, int b) {return a + b; }'. 컴파일러가 변수 유형을 처리합니다. –

관련 문제