0

这是我要解析的文档

<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()

如果我错了,请纠正我。

4

1 回答 1

0

您测量的是下载文件所需的时间,而不是 XDocument 解析它所需的时间。使用 XmlReader 将花费完全相同的时间(±几秒钟,如果有的话),因为 XmlReader 将不得不等待相同的时间来下载文件。

GetResponse 不会下载整个响应。每当您从响应流中读取数据时,都会从服务器中提取数据。这正是您下载大量数据时 Web 服务器的工作方式:它们返回一个表示一切正常的响应,并允许您打开一个流并开始从响应流中读取响应。如果您在到达终点之前关闭流,服务器只会停止发送数据。

于 2013-11-04T12:04:42.753 回答