2011-07-27 5 views
0

J'ai essayé d'utiliser les données d'une API mais je n'ai pas pu lire la réponse XML.Analyse d'une réponse SOAP avec C#

Il CAMES sous la forme:

<?xml version="1.0" standalone="no"?> 
     <SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
     <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
      <SOAPSDK4:GetStoreProductsResponse xmlns:SOAPSDK4="http://www.externalwebservice.com/message/"> 
       <StoreProducts> 
        <StoreID></StoreID> 
        <Products></Products> 
       </StoreProducts> 
      </SOAPSDK4:GetStoreProductsResponse></SOAP-ENV:Body> 
     </SOAP-ENV:Envelope> 

Et ce que je dois est ce qui est à l'intérieur Produits (pour l'instant).

J'essayais d'utiliser Using C# to parse a SOAP Response (et d'autres pour ne pas inonder ceci) sans résultats.

Mon code:

XDocument tst = XDocument.Load("Response.xml"); 
    XNamespace xmlns = "http://schemas.xmlsoap.org/soap/envelope/"; 
    var tstr = from result in tst.Descendants(xmlns + "StoreProducts") select result.Element("Products").Value; 

Je suis presque sûr que je manque quelque chose de fondamental.

Toute idée sera vraiment appréciée.

Merci.

+0

Avez-vous vérifié ce lien? http://stackoverflow.com/questions/2876012/using-c-to-parse-a-soap-response – Peyman

Répondre

1

Dans votre XML StoreProducts est pas dans un espace de noms XML, il suffit de faire:

var tstr = from result in tst.Descendants("StoreProducts") 
      select result.Element("Products").Value; 

Le code exemple que vous avez donné aurait réussi si le XML intérieur ressemblait à ceci:

<SOAP-ENV:StoreProducts> 
    <StoreID></StoreID> 
    <Products></Products> 
    </SOAP-ENV:StoreProducts> 
+0

Merci. Cela a fonctionné juste comme j'avais besoin. – Elder

1

Est-ce Êtes-vous sûr d'avoir besoin d'analyser XML? .NET est très efficace pour gérer SOAP en utilisant C# proxy.

Avez-vous regardé svcutil.exe pour générer un proxy?

0

Dans mon cas, j'ai besoin de lire le xml envoyé dans la demande de poste

 // read the raw request 
     Request.InputStream.Seek(0, SeekOrigin.Begin); 
     string xmlPayload = new StreamReader(Request.InputStream).ReadToEnd(); 
     XDocument doc = XDocument.Parse(xmlPayload); 

     XNamespace xmlns = "urn:sobject.enterprise.soap.sforce.com"; 
     item.sfId = doc.Descendants(xmlns + "Id").First().Value; 
     item.AccountId = doc.Descendants(xmlns + "AccountId").First().Value; 
     item.FirstName = doc.Descendants(xmlns + "FirstName").First().Value; 
     item.LastName = doc.Descendants(xmlns + "LastName").First().Value; 
     item.XmlPayload = xmlPayload;