从Web服务响应中读取包含数组的XML元素

时间:2019-03-14 07:03:22

标签: c# xml webservice-client

我目前正在制作一个Web服务客户端(一个C#Web应用程序),该客户端使用来自供应商Web服务的数据。由于我不是程序员,而且这是我第一次处理Web服务,因此我从许多教程中学习了如何使用简单的Web服务数据。但是我被卡住了,得到了数组中包含的值。

这是XML格式的Web服务响应,我可以从SOAP客户端(例如SoapUI)获得

    <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”的元素类型是一个数组,因此我必须进一步深入层次结构才能获取我需要的数据。在大多数相关的线程中,我可以看到人们如何从数组购买中获取价值,就我而言,数组中也存在数组。任何帮助/ clue / hint都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

使用Xml Linq:

jQuery( document ).ready(function() {

    //Question 34.1
    jQuery('select#fever').bind('load change', function () {
        var drug_reaction = jQuery(this).val();
        if(drug_reaction== 1){            
            jQuery('input#fever_days').attr('disabled',false); 
            jQuery('select#character_of_fever').attr('disabled',false);     
            jQuery('select#evening_raise_of_temparature').attr('disabled',false);
            jQuery('select#night_sweats').attr('disabled',false);       
        }else{
            jQuery('input#fever_days').val("");
            jQuery('input#fever_days').attr('disabled',true); 

            jQuery('select#character_of_fever').val("");
            jQuery('select#character_of_fever').attr('disabled',true); 

            jQuery('select#evening_raise_of_temparature').val("");
            jQuery('select#evening_raise_of_temparature').attr('disabled',true); 

            jQuery('select#night_sweats').val("");
            jQuery('select#night_sweats').attr('disabled',true);       
        }
    });
 });