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
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
Auch das ist das problem, ich jetzt nicht, wie man den code zu schreiben, können Sie mir helfen, ich werde verrückt!
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei einer Anfrage wie dieser:
Den folgenden code hat die Arbeit Auspacken der Daten und bekommen nur die
<ReponseData>
xml-Inhalt:InformationsquelleAutor Luis Quijada
Linq2Xml ist einfacher zu bedienen.
--EDIT--
Loop Elemente in
body
:Ich bearbeitete die Antwort.
InformationsquelleAutor L.B
Können Sie nutzen
GetElementsByTagName
zu extrahieren, die Körper der soap-Anforderung.InformationsquelleAutor Rich Hildebrand