我是Linq2XML的新手,因为我编写了许多代码来执行简单的操作,在一个简单的项目中,我想尝试一下......
我和我在一起已经有2个小时了,我没有做到这一点:(
我真的,真的想回到 XmlNode-code-like
任务:
alt text http://www.balexandre.com/temp/2010-02-26_0038.png
我的 XDocument 有一个名为 TransactionInformationType 的节点,这是一个序列,我很简单想要获取所有并且只检索我需要的2个变量(你可以看到代码注释)正好在选择c;
之下在观看窗口中,您可以看到
doc.Descendants("TransactionInformationType")
根本不返回任何内容,并且通过Text Visualizer中的XDocument内容查看它确实存在!
有人愿意解释并帮助我通过这个巨大的墙吗?
谢谢!
加
答案
Response 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
};
谢谢大家的帮助!
答案 0 :(得分:48)
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");
答案 1 :(得分:12)
这应该解决你的问题(用正确的URL替换命名空间):
XNamespace ns = "https://ssl.ditonline...";
doc.Descendants(ns + "TransactionInformationType");