繁体   English   中英

如何使用xmlreader解析此文档?

[英]How to use xmlreader to parse this document?

这是我要解析的文档

<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”

如果存在并且“键”的值为“ report_id”,则将strRptID设置为等于子节点“值”的值

第一项的情况是2467

如果存在并且“键”的值为“ vendor_hi”,则将strVendor设置为等于子节点“值”的值

在这种情况下为01.01。

如果存在并且“键”的值为“ area_nm”,则将strArea设置为等于子节点“值”的值

在第一个项目的情况下是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()

如果我错了,请纠正我。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM