Auszug SOAP-body aus einer SOAP-Nachricht

Möchte ich extrahieren SOAP-body aus einer SOAP-Nachricht, ich habe einige Daten im SOAP-body, das muss ich analysieren in der Datenbank, so ist dies der code:

public string Load_XML(string SoapMessage)
{
    //check soap message
    if (SoapMessage == null || SoapMessage.Length <= 0)
        throw new Exception("Soap message not valid");

    //declare some local variable
    int iSoapBodyStartIndex = 0;
    int iSoapBodyEndIndex = 0;

    //load the Soap Message
    //Učitaj string XML-a i pretvori ga u XML
    XmlDocument doc = new XmlDocument();

    try
    {
        doc.Load(SoapMessage);
    }

    catch (XmlException ex)
    {
        WriteErrors.WriteToLogFile("WS.LOAD_DOK_LoadXML", ex.ToString());

        throw ex;
    }

    //search for the "http://schemas.xmlsoap.org/soap/envelope/" URI prefix
    string prefix = string.Empty;
    for (int i = 0; i < doc.ChildNodes.Count; i++)
    {
        System.Xml.XmlNode soapNode = doc.ChildNodes[i];
        prefix = soapNode.GetPrefixOfNamespace("http://schemas.xmlsoap.org  /soap/envelope/");

        if (prefix != null && prefix.Length > 0)
            break;
    }

    //prefix not founded. 
    if (prefix == null || prefix.Length <= 0)
        throw new Exception("Can't found the soap envelope prefix");

    //find soap body start index
    int iSoapBodyElementStartFrom = SoapMessage.IndexOf("<" + prefix + ":Body");
    int iSoapBodyElementStartEnd = SoapMessage.IndexOf(">", iSoapBodyElementStartFrom);    -> HERE I HAVE AN ERROR!!!!   
    iSoapBodyStartIndex = iSoapBodyElementStartEnd + 1;

    //find soap body end index
    iSoapBodyEndIndex = SoapMessage.IndexOf("</" + prefix + ":Body>") - 1;

    //get soap body (xml data)
    return SoapMessage.Substring(iSoapBodyStartIndex, iSoapBodyEndIndex - iSoapBodyStartIndex + 1);
}

Ich bekam eine Fehlermeldung hier:

int iSoapBodyElementStartEnd = SoapMessage.IndexOf(">", iSoapBodyElementStartFrom); 

Den Fehler:

Index war außerhalb des Bereichs. Muss nicht negativ und kleiner als die Größe der
die Sammlung.

Wenn jemand weiß wie man dieses Problem lösen?

Ist es definitiv nicht-negativ? Ich denke, es ist -1, da der block war nicht abgestimmt in der Zeichenfolge. Was in der Zeichenfolge?
Ich würde auch prüfen, ob prefix richtig gelesen wird. Ihre SOAP-Namensraum sollten keine Leerzeichen in der Mitte - hat entfernen diese Hilfe? Es kann auch besser sein, mit einem richtigen XML-parser hier eher als substring-matching.
Was meinst du mit der richtigen XML-parser? Ich bin nicht dazu Sie? Dies ist, was ich will, um zu Lesen <?xml version="1.0" encoding="UTF-8" ?> <soap:envelope xmlns:xsd="w3.org/2001/XMLSchema" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:soap="schemas.xmlsoap.org/soap/envelope"> <soap:body> <Bestellung> <id>1234</id> </bestellen> </soap:body> </soap:envelope>
Ich meinte verwenden soapNode zu finden, die body-Tags und extrahieren Sie die Inhalte, die Sie wollen, anstatt einen Teilstring. Suche bei deinem Beispiel, du hast die lower-case-b 'Körper' in der XML aber upper-case 'Körper' in den code.
Auch das ist das problem, ich jetzt nicht, wie man den code zu schreiben, können Sie mir helfen, ich werde verrückt!

InformationsquelleAutor CrBruno | 2012-04-24

Schreibe einen Kommentar