c#解析XML子节点

本文关键字:子节点 XML 解析 | 更新日期: 2023-09-27 18:07:02

我有一个巨大的XML文件;太大了,我无法用任何GUI程序打开。

我正在写一个小程序来解析文档中需要的信息。

我有一个函数,它读取文件并为每个节点写入控制台:

 XDocument doc = XDocument.Load(@"c:'Events'Import'events.xml");
                var i = 0;

                foreach (XElement el in doc.Root.Elements())
                {
                    i++;
                   Console.WriteLine(el.FirstNode);
                }Console.ReadLine();
                }

返回如下结构的XML:

<System>
  <Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-A5BA-3E3B0328C30D}'/>
  <EventID>4907</EventID>
  <Version>0</Version>
  <Level>0</Level>
  <Task>13568</Task>
  <Opcode>0</Opcode>
  <Keywords>0x8020000000000000</Keywords>
  <TimeCreated SystemTime='2015-03-29T14:47:06.505465800Z'/>
  <EventRecordID>195943</EventRecordID><Correlation/>
  <Execution ProcessID='808' ThreadID='828'/>
  <Channel>Security</Channel>
  <Computer>somecomputer.com</Computer>
  <Security/>
</System>

我如何修改我的功能,只是写EventID子节点?

c#解析XML子节点

如果您的xml很大,那么XmlReader通常是比XmlDocument更好的选择。XmlReader是基于流的,不会在内存中加载完整的Xml。您可以使用xmlreader的ReadToFollowing方法实现相同的目的,如下所示:https://msdn.microsoft.com/en-us/library/cc189056(v=vs.95).aspx

您可以通过以下方式通过XmlLinq获取元素:

 XDocument doc = XDocument.Load(@"c:'Events'Import'events.xml");
         if(doc != null)
         {
            var elements =  from el in doc.Element("System").Elements()
             where el.Name == ("EventID")
             select el;
             foreach (XElement item in elements)
             {
                 Console.WriteLine(item.Value);
             }    
         }
         Console.ReadLine();