我是Linq2XML的新手,因为我编写了很多行来执行简单的操作,而在一个简单的项目中,我想尝试一下......
我和他一起工作了2个小时,我没有做到这一点:(
我真的,真的想回到XmlNode-code-like
任务:
正如你从这个截图中看到的那样
替代文字http://www.balexandre.com/temp/2010-02-26_0038.png
我的XDocument有一个名为TransactionInformationType的节点,它是一个序列,我很简单想要获取所有并且只需要检索我需要的2个变量(你可以看到代码注释),然后选择c;
在Watch窗口中,您可以看到
doc.Descendants("TransactionInformationType")
Run Code Online (Sandbox Code Playgroud)
什么都不返回,并且通过Text Visualizer中的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
};
Run Code Online (Sandbox Code Playgroud)
谢谢大家的帮助!
dtb*_*dtb 48
var result = doc.Descendants("TransactionInformationType");
Run Code Online (Sandbox Code Playgroud)
选择XDocument中具有元素名称"TransactionInformationType"且位于空命名空间中的所有后代.从您的屏幕截图看,您尝试选择的元素似乎在命名空间中"https://ssl.ditonlinebetalingssystem.dk/remote/payment".您需要明确指定:
XNamespace ns = "https://ssl.ditonlinebetalingssystem.dk/remote/payment";
?? ?
var result = doc.Descendants(ns + "TransactionInformationType");
Run Code Online (Sandbox Code Playgroud)
Axe*_*ger 12
这应该解决你的问题(用正确的URL替换命名空间):
XNamespace ns = "https://ssl.ditonline...";
doc.Descendants(ns + "TransactionInformationType");
Run Code Online (Sandbox Code Playgroud)