簡體   English   中英

了解Linq To Xml-后代未返回任何結果

[英]Understanding Linq To Xml - Descendants return no results

我是Linq2XML的完全新手,因為我編寫了很多行代碼來執行簡單的事情,在一個簡單的項目中,我想嘗試一下...

我已經用了2個小時了,但我什么都沒做對:(

我真的很想回到XmlNode-code-like

任務:

  • 我將SOAP Action發送到ASMX服務,並且得到XML響應
  • 我將XML解析為XDocument對象
  • 我嘗試獲取節點列表...錯誤! 問題!

如您從此屏幕截圖中所見

替代文字http://www.balexandre.com/temp/2010-02-26_0038.png

我的XDocument有一個稱為TransactionInformationType的Node,它是一個Sequence,我簡單地想全部獲取並檢索選擇c下方僅需要的2個變量(您可以看到注釋的代碼)

在“ 監視”窗口中,您可以看到

doc.Descendants("TransactionInformationType")

根本不返回任何內容,並且通過Text Visualizer中的XDocument內容看到它確實存在!

有人願意解釋並幫助我通過這個巨大的牆嗎?

謝謝!


添加

XDocument內容


回答

響應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
            };

謝謝大家的幫助!

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

在XDocument中選擇元素名稱為"TransactionInformationType"且在空名稱空間中的所有后代。 從屏幕快照中,您似乎要選擇的元素似乎在名稱空間"https://ssl.ditonlinebetalingssystem.dk/remote/payment" 您需要明確指定:

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

這應該可以解決您的問題(用正確的URL替換名稱空間):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM