我想从SOAP消息中提取SOAP体,我在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);
} 
 我在这里有一个错误:
int iSoapBodyElementStartEnd = SoapMessage.IndexOf(">",iSoapBodyElementStartFrom); 
 错误:
Index was out of range. Must be non-negative and less than the size of
the collection.
如果有人知道如何解决这个问题?
解决方法
 对于这样的请求: 
  
  
 
        String request = @"<?xml version=""1.0"" encoding=""UTF-8""?>
    <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
    xmlns:soapenc=""http://schemas.xmlsoap.org/soap/encoding/""
    xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
    xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
    <soap:Body>
    <ResponseData xmlns=""urn:Custom"">some data</ResponseData>
    </soap:Body>
    </soap:Envelope>"; 
 以下代码完成了打开数据的工作,只得到< ReponseData> xml内容:
XDocument xDoc = XDocument.Load(new StringReader(request));
var unwrappedResponse = xDoc.Descendants((XNamespace)"http://schemas.xmlsoap.org/soap/envelope/" + "Body")
    .First()
    .FirstNode