2010-02-25 87 views
40

我是一個完全地新來Linq2XML我的代碼多線進行簡單的事情,並在一個簡單的項目,我想試試看......瞭解的LINQ到XML - 後裔返回任何結果

我與這2小時,並沒有什麼我得到的是正確的:(

我真的,真的想回去XmlNode的代碼,都

任務:

  • 我發送SOAP行動ASMX服務,我也得到了響應,XML
  • 我解析XML爲XDocument對象
  • 我試圖讓一個節點列表...犯錯!問題!

你可以從這個screenshot

alt text http://www.balexandre.com/temp/2010-02-26_0038.png

的XDocument看到有一個叫TransactionInformationType女巫是一個序列節點,我簡單的想要得到所有和檢索只有2我需要的變量(你可以看到代碼註釋)在下面select c;

觀看窗口

可以看到

doc.Descendants("TransactionInformationType") 

回報什麼都沒有,並在文本展示臺中的XDocument的內容看,它確實存在!

任何關心解釋和幫助我通過這個巨大的牆?

謝謝!


新增

XDocument content


回答

響應XML具有

<gettransactionlistResponse xmlns="https://ssl.ditonlinebetalingssystem.dk/remote/payment">

,我必須用這個作爲命名空間!

事實證明,以檢索值,我確實需要使用的XNamespace以及,所以最終的代碼如下所示:

// Parse XML 
XDocument doc = XDocument.Parse(strResponse); 
XNamespace ns = "https://ssl.ditonlinebetalingssystem.dk/remote/payment"; 

var trans = from item in doc.Descendants(ns + "TransactionInformationType") 
      select new TransactionInformationType 
      { 
       capturedamount = Convert.ToInt32(item.Element(ns + "capturedamount").Value), 
       orderid = item.Element(ns + "cardtypeid").Value 
      }; 

謝謝大家爲幫助!

+1

能否請您發佈的XML的頭部直至元素你正在找。這裏可能有一個命名空間問題。 – AxelEckenberger 2010-02-25 23:54:02

+0

完成!將它添加到pasteBin,因爲它很大(即使我只顯示2個交易):) – balexandre 2010-02-26 00:31:49

+2

+100如果我可以.. :) – asifrc 2013-03-12 12:47:22

回答

48
var result = doc.Descendants("TransactionInformationType"); 

選擇在具有元素名稱"TransactionInformationType",並在空命名空間中的XDocument所有後代。 從您的屏幕截圖看來,您嘗試選擇的元素似乎在命名空間"https://ssl.ditonlinebetalingssystem.dk/remote/payment"中。 你需要明確指定:

XNamespace ns = "https://ssl.ditonlinebetalingssystem.dk/remote/payment"; 
               ↑↑      ↑ 
var result = doc.Descendants(ns + "TransactionInformationType"); 
+0

同樣的想法...... – AxelEckenberger 2010-02-25 23:58:44

+0

剛剛添加XDocument內容到我的答案。如果我使用'「https://ssl.ditonlinebetalingsystem.dk/remote/payment/」'作爲XNamespace,我會得到相同的行爲...換句話說,仍然沒有任何東西:( – balexandre 2010-02-26 00:25:28

+0

@balexandre:沒有'/'在你的例子中'payment'之後,並且缺少's'確保你在C#中使用了與XML示例中完全相同的命名空間 – dtb 2010-02-26 00:31:15

11

這應該isssue解決你(用正確的網址替換命名空間):

XNamespace ns = "https://ssl.ditonline..."; 
doc.Descendants(ns + "TransactionInformationType");