读取 SOAP 消息并将数据插入到变量中

Posted

技术标签:

【中文标题】读取 SOAP 消息并将数据插入到变量中【英文标题】:Read SOAP Message and insert the data into a variable 【发布时间】:2021-10-25 07:09:39 【问题描述】:
<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.'

【问题讨论】:

【参考方案1】:

我相信你想这样做:

string Status = xnList[0]["return"]["header"]["sessionToken"].InnerText;

sessionToken 不在第一个节点的正下方,因此尝试访问它会返回null,在null 上调用.InnerText 会导致NullReferenceException。

【讨论】:

这意味着我需要说明显示 sessionToken 路径的每个节点对吗? 是的,如果路径始终相同,这看起来是最简单的方法。如果路径发生变化,它会变得更加复杂。 你有什么可以参考和学习的参考资料吗? 我认为docs.microsoft.com/en-us/dotnet/api/… 的示例将有助于更好地理解。也是同一页的下一部分,docs.microsoft.com/en-us/dotnet/api/… 非常感谢

以上是关于读取 SOAP 消息并将数据插入到变量中的主要内容,如果未能解决你的问题,请参考以下文章

salesforce 零基础学习(五十五)java通过SOAP方式定时访问某个文件然后插入到sObject中

从文本文件中读取数据并将数据插入到数组中

读取 SOAP 消息头 WCF

如何在 C++ 中读取文件并将文件中的数据插入到类类型的向量中?

如何从 PubSub 主题读取数据并将其解析到光束管道中并打印

Node.js - 如何从文件中读取数据并将输出集成到变量中