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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
C# 如何使用XmlReader类c进行分页#_C#_Xml_Linq_Pagination_Xmlreader - Fatal编程技术网

C# 如何使用XmlReader类c进行分页#

C# 如何使用XmlReader类c进行分页#,c#,xml,linq,pagination,xmlreader,C#,Xml,Linq,Pagination,Xmlreader,目前,我使用LINQ从xml文件中获取数据,但问题是我使用XDocument加载xml文件,但XDocument类将xml数据加载到内存中。所以,如果我的xml文件中有10000个数据,那么XDocument类将把10000个数据加载到内存中。所以有人告诉我,如果将读取xml数据与XmlReader类一起使用,那么它将不会将完整数据转储到内存中 目前,我用这种方式从xml文件中获取数据 我的xml数据如下所示: <?xml version="1.0" encoding="utf-8"?&g

目前,我使用LINQ从xml文件中获取数据,但问题是我使用XDocument加载xml文件,但XDocument类将xml数据加载到内存中。所以,如果我的xml文件中有10000个数据,那么XDocument类将把10000个数据加载到内存中。所以有人告诉我,如果将读取xml数据与XmlReader类一起使用,那么它将不会将完整数据转储到内存中

目前,我用这种方式从xml文件中获取数据

我的xml数据如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Orders>
    <OrderID>10248</OrderID>
    <CustomerID>VINET</CustomerID>
    <EmployeeID>5</EmployeeID>
    <OrderDate>1996-07-04T00:00:00</OrderDate>
    <RequiredDate>1996-08-01T00:00:00</RequiredDate>
    <ShippedDate>1996-07-16T00:00:00</ShippedDate>
    <ShipVia>3</ShipVia>
    <Freight>32.3800</Freight>
    <ShipName>Vins et alcools Chevalier</ShipName>
    <ShipAddress>59 rue de l'Abbaye</ShipAddress>
    <ShipCity>Reims</ShipCity>
    <ShipPostalCode>51100</ShipPostalCode>
    <ShipCountry>France</ShipCountry>
  </Orders>
</Root>
有人告诉我如何使用xmlreader从xml文件中读取数据,其中包含分页和ORDERBY子句

我得到了一次成功,但不知道如何将其用于我的目的:

using( var reader = XmlReader.Create( . . . ) )
{
       reader.MoveToContent();
       reader.ReadToDescendant( "book" );
       // skip N <book> elements
       for( int i = 0; i < N; ++i )
       {
              reader.Skip();
              reader.ReadToNextSibling( "book" );
       }
       // read M <book> elements
       for( int i = 0; i < M; ++i )
       {
              var s = reader.ReadOuterXml();
              Console.WriteLine( s );
              reader.ReadToNextSibling( "book" );
       }
}
使用(var reader=XmlReader.Create(…)
{
reader.MoveToContent();
reader.ReadToDescendant(“书”);
//跳过N个元素
对于(int i=0;i

因此,请参阅上面的代码,并帮助我构造使用xml reader获取分页数据的代码。

试试这段代码。你最近的帖子被锁定了,所以我必须在这里回答

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

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReader reader = XmlReader.Create(FILENAME);
            Order order = new Order();
            while(reader.ReadToFollowing("Orders"))
            {
                string xml = reader.ReadOuterXml().Trim();
                XElement element = XElement.Parse(xml);
                order.Add(element);
            }
            order.Sort();

        }
    }
    public class Order
    {
        public void Add(XElement element)
        {
            if (orders == null)
            {
                orders = new List<Order>();
            }
            Order newOrder = new Order();
            newOrder.OrderId = int.Parse(element.Element("OrderID").Value);
            newOrder.CustomerId = element.Element("CustomerID").Value;
            newOrder.EmployeeId = int.Parse(element.Element("EmployeeID").Value);
            newOrder.OrderDate = DateTime.Parse(element.Element("OrderDate").Value);
            newOrder.RequiredDate = DateTime.Parse(element.Element("RequiredDate").Value);
            newOrder.ShippedDate = DateTime.Parse(element.Element("ShippedDate").Value);
            newOrder.ShipVia = int.Parse(element.Element("ShipVia").Value);
            newOrder.Freight = double.Parse(element.Element("Freight").Value);
            newOrder.ShipName = element.Element("ShipName").Value;
            newOrder.ShipAddress = element.Element("ShipAddress").Value;
            newOrder.ShipCity = element.Element("ShipCity").Value;
            newOrder.ShipPostalCode = int.Parse(element.Element("ShipPostalCode").Value);
            newOrder.ShipCountry = element.Element("ShipCountry").Value;
            orders.Add(newOrder);

        }
        public void Sort()
        {
            orders = orders.OrderBy(x => x.OrderId).ToList();
        }
        public static List<Order> orders { get; set; }
        public int OrderId { get; set; }
        public string CustomerId { get; set; }
        public int EmployeeId { get; set; }
        public DateTime OrderDate { get; set; }
        public DateTime RequiredDate { get; set; }
        public DateTime ShippedDate { get; set; }
        public int ShipVia { get; set; }
        public double Freight { get; set; }
        public string ShipName { get; set; }
        public string ShipAddress { get; set; }
        public string ShipCity { get; set; }
        public int ShipPostalCode { get; set; }
        public string ShipCountry { get; set; }
    }

}
​
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XmlReader=XmlReader.Create(文件名);
订单=新订单();
while(reader.ReadToFollowing(“订单”))
{
字符串xml=reader.ReadOuterXml().Trim();
XElement元素=XElement.Parse(xml);
添加(元素);
}
order.Sort();
}
}
公共阶级秩序
{
公共空白添加(XElement元素)
{
if(orders==null)
{
订单=新列表();
}
订单newOrder=新订单();
newOrder.OrderId=int.Parse(element.element(“OrderId”).Value);
newOrder.CustomerId=element.element(“CustomerId”).Value;
newOrder.EmployeeId=int.Parse(element.element(“EmployeeId”).Value);
newOrder.OrderDate=DateTime.Parse(element.element(“OrderDate”).Value);
newOrder.RequiredDate=DateTime.Parse(element.element(“RequiredDate”).Value);
newOrder.ShippedDate=DateTime.Parse(element.element(“ShippedDate”).Value);
newOrder.ShipVia=int.Parse(element.element(“ShipVia”).Value);
newOrder.Freight=double.Parse(element.element(“运费”).Value);
newOrder.ShipName=element.element(“ShipName”).Value;
newOrder.ShipAddress=element.element(“ShipAddress”).Value;
newOrder.ShipCity=element.element(“ShipCity”).Value;
newOrder.shippastalcode=int.Parse(element.element(“shippastalcode”).Value);
newOrder.ShipCountry=element.element(“ShipCountry”).Value;
订单。添加(新订单);
}
公共无效排序()
{
orders=orders.OrderBy(x=>x.OrderId.ToList();
}
公共静态列表顺序{get;set;}
公共int-OrderId{get;set;}
公共字符串CustomerId{get;set;}
public int EmployeeId{get;set;}
public DateTime OrderDate{get;set;}
所需公共日期时间日期{get;set;}
公共日期时间ShippedDate{get;set;}
公共int ShipVia{get;set;}
公共双运费{get;set;}
公共字符串ShipName{get;set;}
公共字符串ShipAddress{get;set;}
公共字符串ShipCity{get;set;}
公共int shippestalcode{get;set;}
公共字符串ShipCountry{get;set;}
}
}
​

试试这段代码。你最近的帖子被锁定了,所以我必须在这里回答

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

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReader reader = XmlReader.Create(FILENAME);
            Order order = new Order();
            while(reader.ReadToFollowing("Orders"))
            {
                string xml = reader.ReadOuterXml().Trim();
                XElement element = XElement.Parse(xml);
                order.Add(element);
            }
            order.Sort();

        }
    }
    public class Order
    {
        public void Add(XElement element)
        {
            if (orders == null)
            {
                orders = new List<Order>();
            }
            Order newOrder = new Order();
            newOrder.OrderId = int.Parse(element.Element("OrderID").Value);
            newOrder.CustomerId = element.Element("CustomerID").Value;
            newOrder.EmployeeId = int.Parse(element.Element("EmployeeID").Value);
            newOrder.OrderDate = DateTime.Parse(element.Element("OrderDate").Value);
            newOrder.RequiredDate = DateTime.Parse(element.Element("RequiredDate").Value);
            newOrder.ShippedDate = DateTime.Parse(element.Element("ShippedDate").Value);
            newOrder.ShipVia = int.Parse(element.Element("ShipVia").Value);
            newOrder.Freight = double.Parse(element.Element("Freight").Value);
            newOrder.ShipName = element.Element("ShipName").Value;
            newOrder.ShipAddress = element.Element("ShipAddress").Value;
            newOrder.ShipCity = element.Element("ShipCity").Value;
            newOrder.ShipPostalCode = int.Parse(element.Element("ShipPostalCode").Value);
            newOrder.ShipCountry = element.Element("ShipCountry").Value;
            orders.Add(newOrder);

        }
        public void Sort()
        {
            orders = orders.OrderBy(x => x.OrderId).ToList();
        }
        public static List<Order> orders { get; set; }
        public int OrderId { get; set; }
        public string CustomerId { get; set; }
        public int EmployeeId { get; set; }
        public DateTime OrderDate { get; set; }
        public DateTime RequiredDate { get; set; }
        public DateTime ShippedDate { get; set; }
        public int ShipVia { get; set; }
        public double Freight { get; set; }
        public string ShipName { get; set; }
        public string ShipAddress { get; set; }
        public string ShipCity { get; set; }
        public int ShipPostalCode { get; set; }
        public string ShipCountry { get; set; }
    }

}
​
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XmlReader=XmlReader.Create(文件名);
订单=新订单();
while(reader.ReadToFollowing(“订单”))
{
字符串xml=reader.ReadOuterXml().Trim();
XElement元素=XElement.Parse(xml);
添加(元素);
}
order.Sort();
}
}
公共阶级秩序
{
公共空白添加(XElement元素)
{
if(orders==null)
{
订单=新列表();
}
订单newOrder=新订单();
newOrder.OrderId=int.Parse(element.element(“OrderId”).Value);
newOrder.CustomerId=element.element(“CustomerId”).Value;
newOrder.EmployeeId=int.Parse(element.element(“EmployeeId”).Value);
newOrder.OrderDate=DateTime.Parse(element.element(“OrderDate”).Value);
newOrder.RequiredDate=DateTime.Parse(element.element(“RequiredDate”).Value);
newOrder.ShippedDate=DateTime.Parse(element.element(“ShippedDate”).Value);
newOrder.ShipVia=int.Parse(element.element(“ShipVia”).Value);
newOrder.Freight=double.Parse(element.element(“运费”).Value);
newOrder.ShipName=element.element(“ShipName”).Value;
newOrder.ShipAddress=element.element(“ShipAddress”).Value;
newOrder.ShipCity=element.element(“ShipCity”).Value;