Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解Linq到Xml-子体不会返回任何结果_C#_Linq To Xml - Fatal编程技术网

C# 理解Linq到Xml-子体不会返回任何结果

C# 理解Linq到Xml-子体不会返回任何结果,c#,linq-to-xml,C#,Linq To Xml,我是Linq2XML的新手,因为我编写了很多行代码来执行简单的事情,在一个简单的项目中,我想尝试一下 我坚持了两个小时,什么都没做,明白了吗: 我真的,真的想回到XmlNode代码 任务: 我向ASMX服务发送一个SOAP操作,并以XML的形式得到响应 我将XML解析为XDocument对象 我尝试获取节点列表。。。犯错误问题 从这里你可以看到 我的XDocument有一个名为TransactionFormationType的节点,它是一个序列,我只想获取所有并检索我需要的2个变量,您可以看到在

我是Linq2XML的新手,因为我编写了很多行代码来执行简单的事情,在一个简单的项目中,我想尝试一下

我坚持了两个小时,什么都没做,明白了吗:

我真的,真的想回到XmlNode代码

任务:

我向ASMX服务发送一个SOAP操作,并以XML的形式得到响应 我将XML解析为XDocument对象 我尝试获取节点列表。。。犯错误问题 从这里你可以看到

我的XDocument有一个名为TransactionFormationType的节点,它是一个序列,我只想获取所有并检索我需要的2个变量,您可以看到在select c下面注释的代码

在手表的橱窗里你可以看到

doc.Descendants("TransactionInformationType")
完全不返回任何内容,通过文本可视化工具中XDocument的内容可以看出,它确实存在

有人愿意解释并帮助我通过这堵巨大的墙吗

谢谢大家!

增加

答复

XML的响应是

我必须使用这个名称空间

事实证明,要检索值,我还需要使用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中元素名为TransactionFormationType且命名空间为空的所有子体。 从您的屏幕截图来看,您试图选择的元素似乎位于名称空间中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");

你能把XML的标题贴到你要找的元素上吗。此处可能存在命名空间问题。完成!将它添加到pasteBin,因为它很大,即使我只显示了2个事务:可能与我的答案中刚刚添加的XDocument内容重复。如果我使用https://ssl.ditonlinebetalingsystem.dk/remote/payment/ 作为XNamespace,我得到了相同的行为。。。换句话说,仍然没有:@balexandre:在您的示例中没有/after payment,并且缺少一个s。确保您在C中使用的名称空间与XML示例中的名称空间完全相同。无论是否使用,结果都是一样的:只需编写一个快速示例,就可以了。如果不是这样的话,你这边一定有不同的东西。