2017-12-10 7 views
0

sind Hier ist der aktuelle Code, den ich alle Tags mit dem Namen Modul, aber ich möchte es nur zum Lesen durch die <keystage3> und so lies alle Module, die sich in diesem Tag befinden.Wie kann ich den Code zum Lesen aller <Module>, die nur in der <Keystage3> Knoten

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 + " "); 
      } 

meine XML-Datei enthält:

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

Also meine Frage ist, wie ich den Code angeben können durch alle <Module> zu lesen, die die <Keystage3> in nur sind als der aktuelle Code gibt mir das alles <Module> für die gesamte XML-Datei.

Antwort

2

Sie Vorfilter die Nachkommen von „keystage3“ und dann, wie Sie unten filtern schon tat:

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

Ausgang:

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

Ich habe noch eine Frage zu meinen Code, wie ich kann, ist, Iterieren abhängig davon, wie viele Knoten vorhanden sind und erstellen dynamische Beschriftungen abhängig von der Anzahl der Knoten – user7388968

Verwandte Themen