2010-12-01 6 views
4

Je me lève dans Linq vers XML en C# et j'essaie d'analyser le message suivant et ne semble pas faire beaucoup de progrès. Voici le message de savon Je ne suis pas sûr si je dois peut-être utiliser un espace de noms. Voici le message SOAP que j'essaye de formater. Toute aide serait grandement appréciée. J'essaie d'extraire les valeurs. Merci.Utilisation de LINQ to XML pour analyser un message SOAP

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
    <Lookup xmlns="http://ASR-RT/"> 
    <objIn> 
    <transactionHeaderData> 
    <intWebsiteId>1000</intWebsiteId> 
    <strVendorData>test</strVendorData> 
    <strVendorId>I07</strVendorId> 
    </transactionHeaderData> 
    <intCCN>17090769</intCCN> 
    <strSurveyResponseFlag>Y</strSurveyResponseFlag> 
    </objIn> 
    </CCNLookup> 
</soap:Body> 
</soap:Envelope> 
+0

Pouvez-vous poster le code que vous avez? Ou au moins un exemple qui démontre le problème. –

+0

Une raison particulière pour l'analyse manuelle des messages SOAP? –

Répondre

0

XDocument Utiliser LINQ pour charger le texte XML en appelant XDocument.Load() ou similaire. Ensuite, vous pouvez marcher à travers l'arbre des éléments au large de la racine du xdoc, en utilisant des fonctions comme

foreach (var x in xdoc.Elements("Lookup")) 
{...} 
+0

Je crois qu'il a besoin de xdoc.Elements (XName.Get ("lookup", "http: // ASR-RT /")) que le Xml a un espace de noms par défaut – dkackman

9

Si cela est sur le point d'interagir avec un service SOAP s'il vous plaît utiliser Add Service Reference ou wsdl.exe.

Si cela est à peu près l'analyse syntaxique du XML, en supposant avez la réponse SOAP dans un XDocument nommé soapDocument:

XNamespace ns = "http://ASR-RT/"; 
var objIns = 
    from objIn in soapDocument.Descendants(ns + "objIn") 
    let header = objIn.Element(ns + "transactionHeaderData") 
    select new 
    { 
     WebsiteId = (int) header.Element(ns + "intWebsiteId"), 
     VendorData = header.Element(ns + "strVendorData").Value, 
     VendorId = header.Element(ns + "strVendorId").Value, 
     CCN = (int) objIn.Element(ns + "intCCN"), 
     SurveyResponse = objIn.Element(ns + "strSurveyResponseFlag").Value, 
    }; 

Cela vous donnera un IEnumerable de anonymous types vous traitez avec comme des objets entièrement fortement typés dans cette méthode.

+0

Merci beaucoup cameron, votre réponse m'a beaucoup aidé problème résolu après une recherche de jour – praveenb

0

Vous pouvez obtenir votre XML dans un XElement un puis juste faire:.

rsp.Descendants("Lookup").ToList(); 

Ou

rsp.Descendants ("objIn") ToList();

Je pense que c'est la meilleure façon de le faire. Je pense que XElement est le meilleur choix.