2016-02-09 105 views
0

我想在C#中使用WPF中的按鈕讀取XML。 我有這個XML文件:從XML文件中讀取C#

<?xml version="1.0" encoding="utf-8" ?> 
<date> 
    <Disciplina nume="Disc1" cadru="Cadru1"> 
     <Student> 
      <Nume>Student1</Nume> 
      <Nota>9</Nota> 
     </Student> 
    </Disciplina> 
</date> 

在閱讀按鈕,我有這樣的代碼:

XmlTextReader rd = new XmlTextReader(@"Test.xml"); 
string dnume = "", dcadru = "", snume = "",snota="", element = ""; 

while (rd.Read()) 
{ 
    switch (rd.NodeType) 
    { 
     case XmlNodeType.Element: 
      element = rd.Name; 
      break; 

     case XmlNodeType.Text: 
      if (element == "Disciplina") 
      { 
       dnume = rd.GetAttribute("nume"); 
       dcadru = rd.GetAttribute("cadru"); 
      } 
      else 
       if (element == "Student") 
       { 

       } 
      break; 
     case XmlNodeType.EndElement: 
      if (rd.Name == "Student1") 
      { 
       MessageBox.Show(""); 
      } 
      break; 
    } 
} 
rd.Close(); 

的問題是,我不知道如何讀學生節點的信息。你可以幫我嗎?

+4

任何原因,你真的需要使用'XmlTextReader'?加載一個'XDocument'是相當簡單的... –

+0

我需要使用它,因爲這是我在大學使用的。是考試的東西。 –

回答

1

如果你真的需要使用XmlReader類,你可以在控制檯應用程序使用代碼象下面這樣:

var nestedLevel = 0; 
var studentNestedLevel = 0; 

using (var reader = XmlTextReader.Create(@"Test.xml")) 
{ 
    while (reader.Read()) 
    { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: 
       nestedLevel++; 
       if (studentNestedLevel > 0) 
        Console.Write("{0}: ", reader.Name); 
       if (reader.Name.ToLower() == "student") 
        studentNestedLevel = nestedLevel; 
       break; 

      case XmlNodeType.Text: 
       if (studentNestedLevel > 0) 
        Console.WriteLine("{0}", reader.Value); 
       break; 

      case XmlNodeType.XmlDeclaration: 
      case XmlNodeType.ProcessingInstruction: 
       if (studentNestedLevel > 0) 
        Console.WriteLine("{0}: {1}", reader.Name, reader.Value); 
       break; 

      case XmlNodeType.Comment: 
       break; 

      case XmlNodeType.EndElement: 
       nestedLevel--; 
       if (reader.Name.ToLower() == "student") 
        studentNestedLevel = 0; 
       break; 
     } 
    } 
}