【发布时间】:2019-03-14 07:03:22
【问题描述】:
我目前正在制作一个 Web 服务客户端(一个 C# Web 应用程序),它使用来自我的供应商的 Web 服务的数据。由于我不是程序员,这是我第一次处理 Web 服务,我从许多关于使用简单 Web 服务数据的教程中学习。但是我被困住了,我得到了一个数组中包含的值。
这是我可以从 SoapUI 等 SOAP 客户端获取的 XML 格式的 Web 服务响应:
<GetSiteDataResponse xmlns="http://tempuri.org/">
<SiteDataResult
xmlns:a="http://schemas.datacontract.org/2004/07/KPIService"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:SiteName>PMU88</a:SiteName>
<a:SiteLocation>EcoHill</a:SiteLocation>
<a:SiteData>
<a:DateIntervalNode>
<a:Date>2019-01-01</a:Date>
<a:Temperature>
<a:TemperatureNode>
<a:AverageTemperature>35</a:AverageTemperature>
<a:Unit>C</a:Unit>
</a:TemperatureNode>
</a:Temperature>
</a:DateIntervalNode>
<a:DateIntervalNode>
<a:Date>2019-01-02</a:Date>
<a:Temperature>
<a:TemperatureNode>
<a:AverageTemperature>32</a:AverageTemperature>
<a:Unit>C</a:Unit>
</a:TemperatureNode>
</a:Temperature>
</a:DateIntervalNode>
</a:SiteData>
</SiteDataResult>
</GetSiteDataResponse>
为了在 Web 应用程序中使用 Web 服务数据,我在 Web 应用程序中添加了一个链接到 Web 服务 WSDL 的服务引用。结果参数将在网页中显示为标签。这是我的代码:
public partial class SiteTemp : System.Web.UI.Page
{
protected void btnInvoke_Click1(object sender, EventArgs e)
{
ServiceReference1.siteTemperatureData myWebService = new ServiceReference1.siteTemperatureDataClient();
string username = "user1";
string password = "mypassword";
string siteID = "1104";
lblSiteName.Text = myWebService.GetSiteData(username, password, siteID).SiteName;
lblSiteLocation.Text = myWebService.GetSiteData(username, password, siteID).SiteLocation;
lblDate1.Text = ???
lblTemperature1.Text = ???
lblUnit1.Text = ???
lblDate2.Text = ???
lblTemperature2.Text = ???
lblUnit2.Text = ???
}
}
我可以获取 SiteName 和 SiteLocation 的值,但我不知道如何获取 Date、AverageTemperature 和 Unit 的值,因为“SiteData”的元素类型是一个数组,我必须进一步向下层级获取我需要的数据。在大多数相关线程中,我可以看到人们如何从数组中获取价值,在我的情况下,数组中还有数组。非常感谢任何帮助/线索/提示。
【问题讨论】:
-
您没有发布整个 xml。您缺少所需的命名空间“a”。
-
感谢您指出这一点。我想我在复制和粘贴时错过了它,但帖子已经过编辑以包含它。
标签: c# xml webservice-client