从 SOAP 消息中提取 SOAP 正文 [英] Extract SOAP body from a SOAP message
本文介绍了从 SOAP 消息中提取 SOAP 正文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从 SOAP 消息中提取 SOAP 正文,我在 SOAP 正文中有一些数据,我必须以日期为基础进行解析,所以这是代码:
I want to extract SOAP body from a SOAP message, I have some data in SOAP body that I have to parse in date base, so this is the 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);
}
我在这里遇到错误:
int iSoapBodyElementStartEnd = SoapMessage.IndexOf(">", iSoapBodyElementStartFrom);
错误:
索引超出范围.必须是非负的并且小于集合.
Index was out of range. Must be non-negative and less than the size of the collection.
如果有人知道如何解决这个问题?
If anyone knows how to solve this?
推荐答案
对于这样的请求:
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>";
以下代码完成了解包数据并仅获取
xml 内容的工作:
The following code did the work to unwrap the data and get only the <ReponseData>
xml content:
XDocument xDoc = XDocument.Load(new StringReader(request));
var unwrappedResponse = xDoc.Descendants((XNamespace)"http://schemas.xmlsoap.org/soap/envelope/" + "Body")
.First()
.FirstNode
这篇关于从 SOAP 消息中提取 SOAP 正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文