读取 SOAP 消息并将数据插入变量
Read SOAP Message and insert the data into a variable
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://webservice.someWebService.php">
<SOAP-ENV:Body>
<ns1:loginResponse>
<return>
<errorCode>OK</errorCode>
<header>
<sessionToken>tokentokentokentokentokentokentokentokentoken</sessionToken>
<errorCode>OK</errorCode>
</header>
</return>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我正在尝试从上面的 XML 获取 sessionToken 并将其放入字符串变量中。
这是我试过的代码:
string soapmessage = response.Content;
XmlDocument document = new XmlDocument();
document.LoadXml(soapmessage); //loading soap message as string
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("d", "http://someURL");
manager.AddNamespace("bhr", "https://webservice.someWebService.php");
XmlNodeList xnList = document.SelectNodes("//bhr:loginResponse", manager);
int nodes = xnList.Count;
string Status;
foreach (XmlNode xn in xnList)
{
Status = xn["d:sessionToken"].InnerText;
}
但是我得到一个错误
System.NullReferenceException: 'Object reference not set to an instance of an object.'
我相信你想这样做:
string Status = xnList[0]["return"]["header"]["sessionToken"].InnerText;
sessionToken 不直接在第一个节点下,因此尝试访问它会 return null
,并且在 null
上调用 .InnerText
将导致 NullReferenceException。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://webservice.someWebService.php">
<SOAP-ENV:Body>
<ns1:loginResponse>
<return>
<errorCode>OK</errorCode>
<header>
<sessionToken>tokentokentokentokentokentokentokentokentoken</sessionToken>
<errorCode>OK</errorCode>
</header>
</return>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我正在尝试从上面的 XML 获取 sessionToken 并将其放入字符串变量中。
这是我试过的代码:
string soapmessage = response.Content;
XmlDocument document = new XmlDocument();
document.LoadXml(soapmessage); //loading soap message as string
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("d", "http://someURL");
manager.AddNamespace("bhr", "https://webservice.someWebService.php");
XmlNodeList xnList = document.SelectNodes("//bhr:loginResponse", manager);
int nodes = xnList.Count;
string Status;
foreach (XmlNode xn in xnList)
{
Status = xn["d:sessionToken"].InnerText;
}
但是我得到一个错误
System.NullReferenceException: 'Object reference not set to an instance of an object.'
我相信你想这样做:
string Status = xnList[0]["return"]["header"]["sessionToken"].InnerText;
sessionToken 不直接在第一个节点下,因此尝试访问它会 return null
,并且在 null
上调用 .InnerText
将导致 NullReferenceException。