如何在c#中获取xml文档的内部节点及其子值

时间:2016-04-10 09:37:24

标签: c# .net xml excel

我有一个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 Message及其子内部文本值,并将每个节点作为excel表列名称,并将值作为excel中的行值。 错误如下 error is null reference

1 个答案:

答案 0 :(得分:1)

您可以这样做,解决方案使用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