Using XMLreader and xpath in large xml-file C#

末鹿安然 提交于 2019-12-18 09:47:33

问题


So I have this rather large XML-file i need to parse and I don't want to load the whole file in memory. The XML looks something like this:

<root>
    <node attrib ="true">
        <child childattrib=1>
        </child>
    </node>
    <node attrib ="false">
        <child childattrib=1>
        </child>
    </node>
</root>

What I want to do is go through each node named node and see if the attribute matches my search-critera. And I want to do it using xpath. I found Parse xml in c# : combine xmlreader and linq to xml which helps me isolate the node in question. But I cant use xpath on the parent node. I guess I'll have to create an xmldocument and load the reader, but I cant get it to work the way I want to.


回答1:


Attributes need double quotes around value(childattrib). Try following which is a combination of xml reader and xml linq. When reading large xml files always use xmlreader.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication74
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReader reader = XmlReader.Create(FILENAME);

            while (!reader.EOF)
            {
                if (reader.Name != "node")
                {
                    reader.ReadToFollowing("node");
                }
                if (!reader.EOF)
                {
                    XElement node = (XElement)XElement.ReadFrom(reader);
                    if ((Boolean)node.Attribute("attrib"))
                    {
                    }
                }
            }

        }

    }
}


来源:https://stackoverflow.com/questions/45822054/using-xmlreader-and-xpath-in-large-xml-file-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!