2017-12-10 11 views
0

ここでは、すべてのタグをモジュール名で出力する現在のコードを示しますが、これは<keystage3>このタグの中にあるすべてのモジュールを読んでください。<Keystage3>ノードにあるすべて<Module>を読み取るコードを指定するにはどうすればいいですか

XElement root = XElement.Load("Data.xml"); 
      var subjects = from subject in root.Descendants() 
          where subject.Name.LocalName.Contains("Subject") 
          select new 
          { 
           subname = subject.Element("subjectName").Value, 
           subid = subject.Element("subjectId").Value, 
           subvalue = subject.Element("subjectvalue").Value 
          }; 

      foreach (var subject in subjects) 
      { 
       Console.WriteLine(subject); 
       //you can use subject like this: 
       string subName = subject.subname; 
       string subID = subject.subid; 
       string subValue = subject.subvalue; 
       TextBox[] info = new TextBox[6]; 



       textBox1.AppendText("Subject Name : " + subName + " Subject Id : " + subID + " Subject Value : " + subValue + " "); 
      } 

私のxmlファイルが含まれています

<PersonDetails> 
    <PersonTitle>Teacher</PersonTitle> 
    <Keystage3> 
    <Subject> 
     <subjectName>maths</subjectName> 
     <subjectId>qq1</subjectId> 
     <subjectvalue>20</subjectvalue> 
     <subjectscore /> 
    </Subject> 
    <Subject> 
     <subjectName>science</subjectName> 
     <subjectId>sla1s</subjectId> 
     <subjectvalue>25</subjectvalue> 
     <subjectscore /> 
    </Subject> 
    </Keystage3> 
<Keystage4> 
    <Subject> 
     <subjectName>ICT</subjectName> 
     <subjectId>a1</subjectId> 
     <subjectvalue>10</subjectvalue> 
     <subjectscore /> 
    </Subject> 
</Keystage4> 
</PersonDetails> 

だから私の質問は、私は現在のコードは私に与え、すべての<Module>用としてのみ<Keystage3>にあるすべての<Module>を通読するコードを指定するにはどうすればよいですxmlファイル全体

答えて

2

そしてあなた「keystage3」により、プレフィルターの子孫とあなたがすでに行ったよう絞り込む:

internal class Program 
    { 
     private static string txt = @" 
<PersonDetails><PersonTitle>Teacher</PersonTitle><Keystage3><Subject> 
<subjectName>maths</subjectName><subjectId>qq1</subjectId><subjectvalue>20</subjectvalue> 
<subjectscore /></Subject><Subject><subjectName>science</subjectName> 
<subjectId>sla1s</subjectId><subjectvalue>25</subjectvalue><subjectscore /> 
</Subject></Keystage3><Keystage4><Subject><subjectName>ICT</subjectName> 
<subjectId>a1</subjectId><subjectvalue>10</subjectvalue><subjectscore /> 
</Subject></Keystage4></PersonDetails>"; 

     static void Main() 
     { 
      XElement root = XElement.Parse(txt); // Load -> Parse 
      var subjects = from stage in root.Descendants() 
          where stage.Name.LocalName == "Keystage3" 
          from subject in stage.Descendants() 
          where subject.Name.LocalName.Contains("Subject") 
          select new 
          { 
           subname = subject.Element("subjectName").Value, 
           subid = subject.Element("subjectId").Value, 
           subvalue = subject.Element("subjectvalue").Value 
          }; 

      foreach (var subject in subjects) 
       Console.WriteLine(subject); 

      Console.ReadLine(); 
     } 
    } 

が出力:

{ subname = maths, subid = qq1, subvalue = 20 } 
{ subname = science, subid = sla1s, subvalue = 25 } 
+0

私はどのようにすることができている私のコードに関する別の質問を持っていますノードの数に応じて動的ラベルを作成し、作成するノードの数に応じて繰り返します – user7388968

関連する問題