理解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");