2011-06-09 10 views
8
<Sections> 
    <Classes> 
     <Class>VI</Class> 
     <Class>VII</Class> 
    </Classes> 
    <Students> 
     <Student>abc</Student> 
     <Student>def</Student> 
    </Students>  
    </Sections> 

Muszę przechodzić przez klasy, aby uzyskać "klasę" w tablicy łańcuchów. Muszę też przejrzeć "Studentów", aby umieścić "Uczeń" w tablicy napisów.Pętla przez wiele podwęzłów w XML

XDocument doc.Load("File.xml"); 
    string str1; 
    foreach(XElement mainLoop in doc.Descendants("Sections")) 
     { 
      foreach(XElement classLoop in mainLoop.Descendants("Classes")) 
       str1 = classLoop.Element("Class").Value +","; 
     //Also get Student value 
     } 

nie działa, aby uzyskać wszystkie zajęcia. Ponadto, muszę przepisać ten bez przy użyciu LINQ do XML, tj. Przy użyciu XmlNodeList i XmlNodes.

XmlDocument doc1 = new XmlDocument(); 
doc1.Load("File.xml"); 
foreach(XmlNode mainLoop in doc.SelectNodes("Sections")) ?? 

Nie wiem, jak się z tym pogodzić.

+0

Czy to zadanie domowe? –

+0

po prostu usuń dom z pracy domowej, tak właśnie jest. ;) – user752709

Odpowiedz

4

XPath jest proste. Aby uzyskać wyniki w tablicy, możesz użyć LINQ lub zwykłej pętli.

var classNodes = doc.SelectNodes("/Sections/Classes/Class"); 
// LINQ approach 
string[] classes = classNodes.Cast<XmlNode>() 
          .Select(n => n.InnerText) 
          .ToArray(); 

var studentNodes = doc.SelectNodes("/Sections/Students/Student"); 
// traditional approach 
string[] students = new string[studentNodes.Count]; 
for (int i = 0; i < studentNodes.Count; i++) 
{ 
    students[i] = studentNodes[i].InnerText; 
} 
1

Nie wiesz o przepisanie go XmlNodes ale dla was może po prostu klas i studentów:

XDocument doc.Load("File.xml"); 
    foreach(XElement c in doc.Descendants("Class")) 
    { 
     // do something with c.Value; 
    } 

    foreach(XElement s in doc.Descendants("Student")) 
    { 
     // do something with s.Value; 
    } 
+0

dzięki, to jest to, czego potrzebowałem, aby przejść przez. – user752709

1

z LINQ do XML:

XDocument doc = XDocument.Load("file.xml"); 
var classNodes = doc.Elements("Sections").Elements("Classes").Elements("Class"); 
StringBuilder result = new StringBuilder(); 
foreach(var c in classNodes) 
    result.Append(c.Value).Append(","); 

Z XPath:

XmlDocument doc = new XmlDocument(); 
doc.Load("file.xml"); 
var classNodes = doc.SelectNodes("/Sections/Classes/Class/text()"); 
StringBuilder result = new StringBuilder(); 
foreach(XmlNode c in classNodes) 
    result.Append(c.Value).Append(",");