了解的LINQ到XML - 后裔返回任何结果了解的LINQ到XML - 后裔返回任何结果(Und

2019-05-12 03:40发布

我是一个完全地新来Linq2XML我的代码多线进行简单的事情,并在一个简单的项目,我想试试看...

我与这2小时,并没有什么我得到的是正确的:(

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

任务:

  • 我发送SOAP动作到ASMX服务,我得到的响应为XML
  • 我解析XML为XDocument对象
  • 我试图让一个节点列表...犯错! 问题!

你可以从这个看截图

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

的XDocument有一个名为TransactionInformationType女巫节点是一个序列,我简单的想要得到所有和检索只有2个变量,我需要(你可以看到代码注释)略低于选择C;

监视窗口中你可以看到,

doc.Descendants("TransactionInformationType")

返回什么都没有,看到通过的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
            };

谢谢大家的帮助!

Answer 1:

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");


Answer 2:

这应该解决您isssue(替换用正确的URL命名空间):

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


文章来源: Understanding Linq To Xml - Descendants return no results