我完全不熟悉Linq2XML,平常为了完成简单的任务编写太多代码,所以在一个简单的项目中我想尝试一下...
我已经花了2个小时,但是什么都做不对 :(
我真的很想回到节点式编码(XmlNode-code-alike)
任务:
- 我向 ASMX 服务发送一个 SOAP 动作,然后将响应作为 XML 接收
- 我将 XML 解析成 XDocument 对象
- 我尝试获取节点列表...问题出现了!
正如您从这个屏幕截图可以看到的那样。
alt文本 http://www.balexandre.com/temp/2010-02-26_0038.png
我的 XDocument 有一个名为TransactionInformationType的节点,它是一个序列,我只想获取所有节点并检索我需要的两个变量(您可以在select c;下面看到代码被注释掉了)。
在Watch窗口中,您可以看到
doc.Descendants("TransactionInformationType")
该方法并没有返回任何内容,但是通过文本可视化器中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
};
感谢大家的帮助!