理解Linq到Xml – 后代没有返回结果
我完全是Linq2XML的新手,因为我编写了很多行来执行简单的事情,在一个简单的项目中,我想尝试一下…
我与这个2小时,没有什么我得到它的权利:(
我真的很想回到XmlNode-code-like
任务:
- 我发送一个SOAP Action到一个ASMX服务,我得到的答复是XML
- 我把XMLparsing成一个XDocument对象
- 我尝试获取节点列表…错误! 问题!
正如你可以从这个截图看到的
替代文字http://www.balexandre.com/temp/2010-02-26_0038.png
我的XDocument有一个名为TransactionInformationType的节点,它是一个序列,我简单地想要得到所有的,并检索我需要的只有2个variables(你可以看到代码注释)
在Watch窗口中可以看到
doc.Descendants("TransactionInformationType")
什么也没有返回,并且通过Text Visualizer中的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 };
谢谢大家的帮助!
var result = doc.Descendants("TransactionInformationType");
selectXDocument中具有元素名称"TransactionInformationType"
且位于空名称空间中的所有后代。 从你的屏幕截图看来,你想要select的元素是在名称空间"https://ssl.ditonlinebetalingssystem.dk/remote/payment"
。 您需要明确指定:
XNamespace ns = "https://ssl.ditonlinebetalingssystem.dk/remote/payment"; ↑↑ ↑ var result = doc.Descendants(ns + "TransactionInformationType");
这应该解决您的问题(用正确的URLreplace名称空间):
XNamespace ns = "https://ssl.ditonline..."; doc.Descendants(ns + "TransactionInformationType");