这是我要解析的文档
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">report_id</key>
<value xsi:type="xsd:string">2467</value>
</item>
<item>
<key xsi:type="xsd:string">vendor_hi</key>
<value xsi:type="xsd:string">01.01</value>
</item>
<item>
<key xsi:type="xsd:string">area_nm</key>
<value xsi:type="xsd:string">MALAYSIA MOBILE DIGI</value>
</item>
</item>
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">report_id</key>
<value xsi:type="xsd:string">2467</value>
</item>
<item>
<key xsi:type="xsd:string">vendor_hi</key>
<value xsi:type="xsd:string">01.07</value>
</item>
<item>
<key xsi:type="xsd:string">area_nm</key>
<value xsi:type="xsd:string">MALAYSIA MOBILE MAXIS</value>
</item>
</item>
以上只是整个文档的一部分,如果我使用这样的代码来解析,项目总数约为3000s
using (WebResponse response = request.GetResponse())
{
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
XDocument xd = XDocument.Load(rd.BaseStream);
执行此行时
XDocument xd = XDocument.Load(rd.BaseStream);
速度太慢,所以我想用xmlreader来解析,我的目的是:首先循环所有节点
<item xsi:type="ns2:Map">
并定义三个变量,比如它们是
string strRptID;
string strVendor;
string strArea;
然后,循环每个子节点“item”,看看它是否有子节点名称是“key”
如果存在且“key”的值为“report_id”,则设置strRptID等于子节点“value”的值
在第一项的情况下是2467
如果存在且“key”的值为“vendor_hi”,则设置strVendor等于子节点“value”的值
在这种情况下,是01.01。
如果存在且“key”的值为“area_nm”,则设置strArea等于子节点“value”的值
在第一项案例中是MALAYSIA MOBILE MAXIS。
然后循环另一个
并做同样的事。
请帮助告诉我如何使用xmlreader执行此操作。
PS:
using (WebResponse response = request.GetResponse())
{
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
XDocument xd = XDocument.Load(rd.BaseStream); //breakpoint this line
hera请求是一个HttpWebRequest,我在
添加一个断点 XDocument xd = XDocument.Load(rd.BaseStream);
当执行到那里时,它几乎没有返回5分钟,我当时不确定,是否
下载完成了吗?我认为下载发生在
request.GetResponse()
如果我错了,请纠正我。
答案 0 :(得分:0)
您测量的是下载文件所需的时间,而不是XDocument解析文件所需的时间。使用XmlReader将花费相同的时间(如果有的话,只需几秒钟),因为XmlReader必须等待相同的时间才能下载文件。
GetResponse 不下载整个回复。每当您从响应流中读取数据时,都会从服务器中提取数据。这就是下载大量数据时Web服务器工作的方式:它们返回一个响应,表明一切正常,并允许您打开流并开始从响应流中读取响应。如果在到达结束之前关闭流,则服务器只会停止发送数据。