XDocument获取XML文件的一部分
我有一个大的xml文件,并希望从中获取一定数量的节点。 处理这个问题的最佳方法是什么。
目前,我正在使用此代码
public string FullCooperationListChunkGet(int part, int chunksize) { StringBuilder output_xml = new StringBuilder(); IEnumerable childList = from el in xml.Elements("Cooperations").Skip(part * chunksize).Take(chunksize) select el; foreach (XElement x in childList.Elements()) { output_xml.Append(x.ToString()); } return output_xml.ToString(); }
Skip(part * chunksize).Take(chunksize)
不起作用(似乎只对Cooperations标签有效,而不是合作标签)
有人可以指出我正确的方向。
谢谢,
rAyt
编辑:
背景是这样的:我正在通过web服务将这些xml部分推送到Blackberry。 不幸的是,黑莓企业服务器上的http请求大小默认限制为256 kb。
XML文件的一部分:
xxx xxx xxx xxx xxx xxx/CustomerName> xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx ...
对于使用XDocument
,我希望你想要这样的东西:
var qry = doc.Root.Elements("Cooperation").Skip(part*chunksize).Take(chunksize);
但是,如果数据很大 ,你可能不得不下载到XmlReader
……我会尝试做一个例子……(更新; 512kb可能不值得……)
你的代码的问题是你在这里使用.Elements()
:
foreach (XElement x in childList.Elements()) { output_xml.Append(x.ToString()); }
只需删除:
foreach (XElement x in childList) { output_xml.Append(x.ToString()); }
有关信息 – 您还在不必要地使用查询语法:
IEnumerable childList = from el in xml.Elements("Cooperations") .Skip(part * chunksize).Take(chunksize) select el;
与以下内容完全相同:
IEnumerable childList = xml.Elements("Cooperations") .Skip(part * chunksize).Take(chunksize);
(因为编译器忽略了一个明显的select
,而没有将它映射到Select
LINQ方法)
你有一个xml文档或片段,即你有超过1个“合作”节点吗? 如果你有更多,你期望得到哪些Coopertation? 从1个合作或多个合作,询问的原因是你写了xml.Element(“合作”)。
这不是诀窍:
xml.Element("Cooperations").Elements("Cooperation").Skip(...).Take(...)
您可以使用System.Net
而不是LINQ来完成此操作,尽管它会非常混乱。 只是为了让您了解如何阅读http响应的部分内容:
// Get the HTTP response string url = "https://someurl.com/myxml.xml"; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Build a stream Stream stream = response.GetResponseStream(); Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); StreamReader reader = new StreamReader( stream, encode ); // Loop the file Char[] read = new Char[256]; int count = reader.Read( read, 0, 256 ); while (count > 0) { String str = new String(read, 0, count); count = reader.Read(read, 0, 256); } response.Close(); stream.Close();
您可以通过调整count
并同时搜索str
以查找XML标记来使用分页。
上述就是C#学习教程:XDocument获取XML文件的一部分分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1000820.html