XDocument并按需加载过大的XML文件
本文关键字:XML 文件 加载 XDocument | 更新日期: 2023-09-27 18:21:46
我写这段代码是为了读取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;
看看这篇SO的帖子,里面有一个类似的问题。