【发布时间】:2013-11-04 09:10:04
【问题描述】:
这是我要解析的文档
<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()
如果我错了,请纠正我。
【问题讨论】:
-
“太慢”是什么意思,为什么您认为 XmlReader 会更快完成?您确定这不是您测量的下载延迟吗?从本地文件加载时是否遇到延迟?
-
你试过什么(使用
XmlReader)?另外:您是否使用XmlSerializer对其进行了分析以将其放入一个简单的对象模型中,该对象模型公开key/value对并从那里解析?您是否使用XElement进行了分析? (XmlReader是……很难做到 100% 正确;几乎任何东西都比直接使用更好) -
为什么我说 xdocument 很慢,请看我的编辑
-
您正在测量下载时间。
-
要回答您的问题,请参阅stackoverflow.com/questions/4184194/…