XDocument并按需加载过大的XML文件

我写了这段代码来读取xml文件的url:

XDocument feedXml = XDocument.Load("url address of xml file here"); var feeds = from feed in feedXml.Descendants("List") select new Event { Id = Int32.Parse(feed.Element("ID").Value), Name = feed.Element("Name").Value, City = feed.Element("City").Value }; return feeds; 

我的问题是文件太大(大约40MB)并且需要花费太多时间来加载。 所以我使用XmlReader来读取xml文件,但这也不适用,因为我不知道如何按需加载每个页面中的每个(例如10个)记录,我应该每次都读取整个文件并跳过其他记录到达到适当的元素,不应该吗?

 string XmlFileUrl = @"url address of xml file here"; using (XmlReader reader = new XmlTextReader(XmlFileUrl)) { bool openItem = false; Event item = new Event(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "List") { item = new Event(); openItem = true; } else if (reader.Name == "Name" && openItem) item.Name = reader.ReadElementContentAsString(); ... } else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "List" && openItem) { openItem = false; feeds.Add(item); } } } 

有没有办法使用Jquery ajax或使用分页将xml文件转换为json,以在每个页面上加载所需的数据,或任何建议?

我认为使用XML结构实现这一点并不容易,在这种情况下可能是XDocument.Load不是合适的方法,因为AFAIK它总是立即加载整个文档。 您可以使用Stream参数而不是URL来尝试重载 ,并尝试通过网络仅加载文件的一部分。 可能你需要编写自己的加载器(只获取文件的一部分,可能是XmlDocument ?)并自​​己解析不完整的结构。

如果您可以调用由URI控制的XML文件的部分(例如: http://domain/entries?page=10&take=20并且此调用返回有效的XML),那么选项将是使用此URL而不是整个文件的链接,如:

 var pagedUri = @"http://domain/entries?page=10&take=20"; XDocument feedXml = XDocument.Load(pagedUri); var feeds = from feed in feedXml.Descendants("List") select new Event { Id = Int32.Parse(feed.Element("ID").Value), Name = feed.Element("Name").Value, City = feed.Element("City").Value }; return feeds; 

看看这个SOpost ,其中解决了类似的问题。