如何获得C#中的XML文档的内部节点及其子值?

我有一个像下面的XML文件

<?xml version='1.0'?> <ENVELOPE> <HEADER> <TALLYREQUEST>Import Data</TALLYREQUEST> </HEADER> <BODY> <IMPORTDATA> <REQUESTDESC><REPORTNAME>All Masters</REPORTNAME><STATICVARIABLES><SVCURRENTCOMPANY>MSIT</SVCURRENTCOMPANY></STATICVARIABLES></REQUESTDESC> <REQUESTDATA> <TALLYMESSAGE> <Entry_x0020_NO.>125</Entry_x0020_NO.> <DATE>12</DATE> <GUID>1258</GUID> <NARRATION>1542</NARRATION> <VOTURETYPENAME>456</VOTURETYPENAME> <NAME>achuth</NAME> <AMOUNT>250</AMOUNT> </TALLYMESSAGE> </REQUESTDATA> </IMPORTDATA> </BODY> </ENVELOPE> 

其中我需要使用循环中的c#代码获取内部节点tally消息及其子内部文本值,并将每个节点作为excel表单列名称和值作为excel中的行值。 错误在下面 错误是空引用

你可以这样做,解决scheme使用LinqXml

  XDocument doc = XDocument.Load(filename); var messages = doc.Descendants("TALLYMESSAGE").Select(s=> new { Entry = s.Element("Entry_x0020_NO.").Value, DATE = s.Element("DATE").Value, GUID = s.Element("GUID").Value, NARRATION = s.Element("NARRATION").Value, VOTURETYPENAME = s.Element("VOTURETYPENAME").Value, AMOUNT = s.Element("AMOUNT").Value, NAME = s.Element("NAME").Value, }).ToList(); 

更新:如在评论中问,如果你正在寻找循环通过每个元素,你可以做到这一点。

  foreach(var element in doc.Descendants("TALLYMESSAGE").Elements()) { Console.WriteLine("{0} = {1}", element.Name, element.Value); } 

检查这个Example