41 votes

Comprendre Linq To Xml - Les descendants ne renvoient aucun résultat

Je suis complètement Nouveau pour Linq2XML que je code beaucoup de lignes pour effectuer de simples choses, et dans un simple projet, j'ai voulu essayer...

Je suis avec cette pendant 2 heures et rien de ce que je ne get it right :(

Je suis vraiment, vraiment pensée pour revenir à XmlNode-code-alike

La Tâche:

  • J'ai envoyer un SAVON Action à un ASMX service et je reçois la réponse au format XML
  • Je Parse le XML dans un objet XDocument
  • J'essaie d'obtenir une liste de nœuds ... euh! Problème!

comme vous pouvez le voir sur cette capture d'écran

alt text

mon XDocument a un Nœud appelé TransactionInformationType sorcière est une Séquence, et j'simple souhaitez obtenir tous et récupérer les 2 seules les variables dont j'ai besoin (vous pouvez voir le code en commentaire) juste en dessous de sélectionner c;

dans le de Regarder de la fenêtre, vous pouvez voir que

doc.Descendants("TransactionInformationType")

renvoie rien du tout, et de voir par le contenu de la XDocument dans le Texte Visualizer, il n'existe pas!

Quelqu'un veut bien expliquer et m'aider à passer ce mur ÉNORME?

Merci!!!!


Ajouté

XDocument contenu


Réponse

la Réponse XML a

<gettransactionlistResponse xmlns="https://ssl.ditonlinebetalingssystem.dk/remote/payment">

et je dois l'utiliser comme espace de Noms!

il s'avère que, pour récupérer des valeurs, j'ai besoin d' utiliser la XNamespace ainsi, de sorte que la version finale du code ressemble à ceci:

// 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
            };

Merci à vous tous pour l'aide!

48voto

dtb Points 104373
 var result = doc.Descendants("TransactionInformationType");
 

sélectionne tous les descendants dans le XDocument dont le nom d'élément est "TransactionInformationType" et qui se trouvent dans l'espace de nom vide. De votre capture d'écran, il semble que l'élément que vous essayez de sélectionner se trouve dans l'espace de nom "https://ssl.ditonlinebetalingssystem.dk/remote/payment" . Vous devez spécifier cela explicitement:

 XNamespace ns = "https://ssl.ditonlinebetalingssystem.dk/remote/payment";
                                              ↑↑                      ↑
var result = doc.Descendants(ns + "TransactionInformationType");
 

12voto

AxelEckenberger Points 9546

Cela devrait vous résoudre isssue (remplacez l'espace de noms par la bonne URL:

 XNamespace ns = "https://ssl.ditonline...";
doc.Descendants(ns + "TransactionInformationType");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X