2010-12-01 8 views
4

Ich erhalte in C# die Geschwindigkeit von Linq nach XML und versuche, die folgende Nachricht zu parsen, und es scheint, dass ich nicht viel Fortschritt mache. Hier ist die Soap-Nachricht Ich bin mir nicht sicher, ob ich vielleicht einen Namespace verwenden muss. Hier ist die SOAP-Nachricht, die ich zu formatieren versuche. Jede Hilfe würde sehr geschätzt werden. Ich versuche, die Werte zu extrahieren. Vielen Dank.Verwenden von LINQ to XML zum Parsen einer SOAP-Nachricht

<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

Können Sie den Code posten, den Sie haben? Oder zumindest ein Beispiel, das das Problem demonstriert. –

+0

Gibt es einen besonderen Grund für das manuelle Parsen von SOAP-Nachrichten? –

Antwort

0

Verwenden Linq des XDocument den XML-Text zu laden, indem XDocument.Load() oder ähnlichen Aufruf. Dann können Sie den Baum der Elemente aus dem xdoc Root laufen durch, Funktionen wie

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

Ich glaube, er braucht xdoc.Elements (XName.Get ("Nachschlagen", "http: // ASR-RT /")) als Xml hat einen Standard-Namespace – dkackman

9

Wenn dies etwa mit einem SOAP-Dienst interagieren ist bitte Add Service Reference oder wsdl.exe verwenden.

Wenn dies nur über die XML-Parsing, vorausgesetzt, Sie die SOAP-Antwort in eine XDocument namens soapDocument haben:

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

Das gibt Ihnen eine IEnumerable von anonymous types Sie als voll beschäftigen stark typisierte Objekte innerhalb dieser Methode.

+0

Vielen Dank Cameron, Ihre Antwort hat mir sehr geholfen, ich behobenes Problem nach einem Tag suchen – praveenb

0

Sie Ihre XML in ein XElement bekommen kann ein dann tun gerade.

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

Oder

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

Ich denke, das ist der beste Weg, es zu tun. Ich denke, dass XElement die beste Wahl ist.