2017-03-15 50 views
0

我有一個URL在訪問時輸出XML,我想將該XML讀爲流(我認爲)並循環遍歷元素對數據執行某些操作,但是我得到奇怪的結果。C#無法循環瀏覽XML流中的元素

我迄今代碼:

private void getFaxFinderLogs() 
{ 
    WebRequest request = WebRequest.Create("https://faxfinder/ffws/v1/inbound_log"); 
    request.Credentials = new NetworkCredential(ffusername_tb.Text, ffpassword_tb.Text); 

    using (WebResponse response = request.GetResponse()) 
    using (XmlReader reader = XmlReader.Create(response.GetResponseStream())) 
    { 
     var xdoc = XDocument.Load(reader); 

     foreach (var el in xdoc.Elements()) 
     { 
      debugTextBox1.Text = string.Format("Key={0},value={1}", el.Name, el.Value); 
     } 
    } 
} 

而且從上述URL的XML產生此結構:

<?xml version="1.0" encoding="UTF-8" ?> 
<response> 
    <message>Success</message> 
    <inbound_fax_entry> 
     <filename>fax_inbound_20170313_133831_recv0943.pdf</filename> 
     <status>complete</status> 
     <complete_time>2017-03-13T17:38:31</complete_time> 
     <remote_id>5551239999</remote_id> 
     <pages>2</pages> 
     <extension>3555</extension> 
     <recipient_name>Customer Service</recipient_name> 
     <channel>8</channel> 
     <delivered_to> 
      <type>Share</type> 
      <destination>//fileserver/share/fax_inbound_20170313_133831_recv0943.pdf</destination> 
     </delivered_to> 
     <delivered_to> 
      <type>Print</type> 
      <destination>LOCAL DESTINATION</destination> 
     </delivered_to> 
     <location /> 
     <caller_name>NAME OF THE CALLER</caller_name> 
     <caller_number>5551239999</caller_number> 
    </inbound_fax_entry> 
    <inbound_fax_entry> 
    ... 
    </inbound_fax_entry> 
</response> 

上面提到的代碼產生在debugTextBox1控制以下輸出:

Key=response,value= 
    Success 

    fax_inbound_20170313_133831_recv0943.pdf 
    complete 
    2017-03-15T13:31:06 
    5551239999 
    12 
    3555 
    Customer Service 
    ... 

我可以看到它只是識別第一個鍵response,然後剝離所有其他鍵並顯示值。老實說,我不需要關鍵名稱,我的最終目標是做一些簡單的分析(統計我們收到的傳真數量,識別錯誤等),然後將數據轉換爲可輸出的CSV。如果我可以讓它枚舉每個inbound_fax_entry密鑰對之間的所有內容,我可以輕鬆地將數據像我想​​要的那樣截斷。

任何建議,將不勝感激。

編輯我在想它,我確實需要鍵名和它們的相應值;並非每個傳真都有每個XML元素填充,所以我需要查找inbound_fax_entry以在我的csv中劃定一條新行,然後記錄每個元素的值,即使沒有數據。

回答

0

我相信你的debugTextBox1行需要讀取el.Key,而不是el.Name。

否則,你可以嘗試:

foreach (var el in xdoc.Elements()) 
     { 
      debugTextBox1.Text = string.Format("Key={0},value={1}", el.Attributes["key"].Value.ToString(), el.Attributes["value"].Value.ToString()); 
     } 

這個問題類似於How to read key/value in xml file和答案有可能是有幫助的。