Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在c#中解析xml:将xmlreader和linq组合成xml_.net_Xml_Linq To Xml_Large Files_Xmlreader - Fatal编程技术网

.net 在c#中解析xml:将xmlreader和linq组合成xml

.net 在c#中解析xml:将xmlreader和linq组合成xml,.net,xml,linq-to-xml,large-files,xmlreader,.net,Xml,Linq To Xml,Large Files,Xmlreader,我必须用C#解析大型XML文件。我使用LINQ转换XML。我有一个这样的结构 <root> <node></node> <node></node> </root> 我想使用XmlReader在每个节点上循环,并使用linqtoxml获取每个节点并处理它 因此,我的内存中只有当前节点。您可以这样做: string path = @"E:\tmp\testxml.xml"; using (var

我必须用C#解析大型XML文件。我使用LINQ转换XML。我有一个这样的结构

<root>
       <node></node>
       <node></node>
</root>

我想使用
XmlReader
在每个节点上循环,并使用linqtoxml获取每个节点并处理它


因此,我的内存中只有当前节点。

您可以这样做:

string path = @"E:\tmp\testxml.xml";
using (var reader = XmlReader.Create(path))
{

    bool isOnNode = reader.ReadToDescendant("node");
    while (isOnNode)
    {
        var element = (XElement)XNode.ReadFrom(reader);

        // Use element with Linq to XML
        // ...

        isOnNode = reader.ReadToNextSibling("node");
    }
}

你真正的问题是什么?@msarchet,我想问题很清楚。。。他希望在每个
元素上使用Linq to XML,但使用
XmlReader
来获取这些元素,以避免在内存中加载整个文档可能会重复它的工作,但在某些情况下,我有一个错误:无法将“System.XML.Linq.XText”类型的对象强制转换为“System.XML.Linq.XElement XmlReader”类型。我不知道为什么,所以我在强制转换之前做了一个测试(我测试节点类型)。但我不知道我是否输了results@bobosh,我不确定是什么导致了这个问题。。。您可以发布导致问题发生的XML文档的子集吗?它始终是同一个模板。在使用xdocument循环节点“node”之前,我没有发现问题。在两千张唱片中,我丢失了三张唱片。这张唱片上没有什么变化。他们一定有什么不同,否则他们的行为会是一样的。。。