chcę wydobyć ciało SOAP z wiadomości SOAP, mam pewne dane w organizmie SOAP, że muszę analizować w dniu bazowym, więc jest to kod:Extract ciało SOAP z komunikatem SOAP
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);
}
mam błąd tutaj:
int iSoapBodyElementStartEnd = SoapMessage.IndexOf(">", iSoapBodyElementStartFrom);
błąd:
Index was out of range. Must be non-negative and less than the size of the collection.
Jeśli ktoś wie jak rozwiązać ten problem?
Czy to zdecydowanie nieujemne? Domyślam się, że jest -1, ponieważ blok początkowy nie był dopasowany w ciągu znaków. Co zawiera ciąg? – Rup
Sprawdziłbym również, czy 'przedrostek' jest poprawnie odczytany. Twoja przestrzeń nazw SOAP nie powinna zawierać spacji w środku - czy usuwa tę pomoc? Lepszym rozwiązaniem może być tutaj użycie odpowiedniego parsera XML zamiast dopasowywania podłańcuchów. – Rup
Co masz na myśli przez odpowiedni parser XML? Nie podążam za tobą? To właśnie chcę przeczytać Xml version = "1.0" encoding = "UTF-8"?> soap: envelope> –
CrBruno