這是我想分析如何使用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>
以上
文檔只是相隔整個文檔的,全部項目的大約是1/3000秒,如果我用這樣的代碼來解析
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;
然後,循環每個子節點「項目」,看它是否有子節點名稱是「關鍵」
是否存在和「密鑰」的值是‘REPORT_ID’,然後設定strRptID相等的子節點‘值’的值
在第一項的情況下,2467
如果存在和「密鑰」的值是‘vendor_hi’,然後設定strVendor相等的子節點‘值’的值
在這種情況下是01.01。
如果存在和「密鑰」的值是‘area_nm’,然後設定strArea等於子節點的‘價值’的在第一個項目的情況下的值
是馬來西亞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
赫拉請求是HttpWebRequest的,我在
XDocument xd = XDocument.Load(rd.BaseStream);
添加斷點時,執行到那裏,它不返回了將近5分鐘,我不知道在那個時候,無論是
下載完成?我認爲下載是發生在
request.GetResponse()
如果我錯了,請糾正我。
你是什麼意思「太慢」,你爲什麼認爲XmlReader會更快完成?你確定這不是你正在測量的下載延遲?從本地文件加載時是否會遇到延遲? –
你試過了什麼(使用'XmlReader')?另外:你是否使用'XmlSerializer'進行了簡介,將其引入一個簡單的對象模型中,該模型公開'key' /'value'對並從那裏解析?您是否使用'XElement'進行了分析? ('XmlReader'是...很難得到100%的權利;幾乎任何東西都會比直接使用更好) –
爲什麼我說xdocument很慢,請參閱我的編輯 – yangl