如何使用xmlreader来解析这个文件?

时间:2013-11-04 09:10:04

标签: c# xml xmlreader

这是我要解析的文档

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

如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:0)

您测量的是下载文件所需的时间,而不是XDocument解析文件所需的时间。使用XmlReader将花费相同的时间(如果有的话,只需几秒钟),因为XmlReader必须等待相同的时间才能下载文件。

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