如何从 SOAP 响应中检索元素值
Posted
技术标签:
【中文标题】如何从 SOAP 响应中检索元素值【英文标题】:How to retrieve an element value from SOAP response 【发布时间】:2021-01-18 04:50:38 【问题描述】:我有以下 SOAP 响应,我想从标记元素 a:Year1 中获取值。如何使用 c# 实现这一点?
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetPerformanceAndRiskByTypeCodeResponse xmlns="http://tempuri.org/">
<GetPerformanceAndRiskByTypeCodeResult xmlns:a="http://schemas.datacontract.org/2004/07/FE.Toolkit.Services.DataContracts.ResponsiveChartingTool" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<IsSuccessful xmlns="http://schemas.datacontract.org/2004/07/FE.Toolkit.Services.DataContracts">false</IsSuccessful>
<ResponseCode xmlns="http://schemas.datacontract.org/2004/07/FE.Toolkit.Services.DataContracts">0</ResponseCode>
<ResponseMessage i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/FE.Toolkit.Services.DataContracts" />
<TotalRows xmlns="http://schemas.datacontract.org/2004/07/FE.Toolkit.Services.DataContracts">0</TotalRows>
<a:CalendarPerformanceAs>2019-12-31T00:00:00</a:CalendarPerformanceAs>
<a:CumulativePerformanceAs>2020-10-01T00:00:00</a:CumulativePerformanceAs>
<a:DiscretePerformanceAs>2020-09-30T00:00:00</a:DiscretePerformanceAs>
<a:InstrumentInformation>
<a:InstrumentInformation>
<a:CalendarPerformance>
<a:IncomeBasisPriceType>2</a:IncomeBasisPriceType>
<a:PerformanceCurrency>USD</a:PerformanceCurrency>
<a:Year1>19.031154</a:Year1>
<a:Year2>-13.434495</a:Year2>
<a:Year3>23.004020</a:Year3>
<a:Year4>-5.584117</a:Year4>
<a:Year5>-2.882996</a:Year5>
</a:CalendarPerformance>
</a:InstrumentInformation>
</a:InstrumentInformation>
<a:RiskAs>2020-09-30T00:00:00</a:RiskAs>
</GetPerformanceAndRiskByTypeCodeResult>
</GetPerformanceAndRiskByTypeCodeResponse>
</s:Body>
</s:Envelope>
我尝试了以下但没有运气:
var str = XElement.Parse(xml.Response.XmlResponse.ToString());
var result = str.Element("InstrumentInformation").Element("InstrumentInformation")[0].Element("CalendarPerformance").Element("Year1").Value;
Console.WriteLine("RESULT" + result);
错误是
Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
【问题讨论】:
您能否详细说明您的代码“不起作用”的原因?你期待什么,实际发生了什么?如果您遇到异常/错误,请发布它发生的行以及可以使用minimal reproducible example 完成的异常/错误详细信息。请edit您的问题将这些详细信息添加到其中,否则我们可能无法提供帮助。 A NullReferenceException 表示您正在访问的对象之一为空。例如,您的Element()
调用之一返回 null 因为它没有找到任何内容,并且在该返回值上进一步调用 Element()
将是一个错误。 More details on NREs
看看这个问题是否能回答你的问题(注意你需要使用 XML 命名空间):***.com/questions/12201822/…(这是一个 dup 目标,但我已经 VtC'd)
【参考方案1】:
你需要处理元素的命名空间。您可以忽略它并使用本地名称,但包含它会更加健壮:
XNamespace ns = "http://schemas.datacontract.org/2004/07/FE.Toolkit.Services.DataContracts.ResponsiveChartingTool";
var y1 = str.Descendants().Elements(ns + "Year1").FirstOrDefault();
【讨论】:
感谢@Crowcoder 的回复,我得到了我需要的值。以上是关于如何从 SOAP 响应中检索元素值的主要内容,如果未能解决你的问题,请参考以下文章