API返回XML文檔的解析並取值

調用一些API接口的時候,會返回XML或json格式的文檔,如果API返回的是XML的文檔,可以嘗試這樣來解析,以百度天氣的API爲例,下面的代碼是從訪問到接受返回的數據到解析。
百度天氣的API:http://api.map.baidu.com/telematics/v3/weather?location=武漢&ak=8IoIaU655sQrs95uMWRWPDIa
訪問它會返回這樣的數據,是XML格式。
百度天氣API返回的數據

下面就是完整的代碼。
第一種:這種XML有很多節點,父節點,子節點。讀取子節點的時候,用下面的代碼。

private string ReWeather()
        {
            string url =
                "http://api.map.baidu.com/telematics/v3/weather?location=武漢&ak=8IoIaU655sQrs95uMWRWPDIa";

            WebRequest HttpWReq = (HttpWebRequest)WebRequest.Create(url);
            HttpWReq.Method = "GET";//設置頁面請求的方式爲GET,可以是POST,試情況而定
            HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();

            StreamReader sw = new StreamReader(HttpWResp.GetResponseStream());//將返回的結果讀入流
            string xmlContent = sw.ReadToEnd(); //將流從頭到尾讀完轉換成字符串
            sw.Close();//關閉流讀取

            XmlDocument doc = new XmlDocument();//新建一個XML文檔
            doc.LoadXml(xmlContent);//將字符串轉換成XML文檔

            XmlNodeList weather_nodes = doc.GetElementsByTagName("weather");//讀取XML文檔的父節點
            XmlNodeList wind_nodes = doc.GetElementsByTagName("wind");
            XmlNodeList temperature_nodes = doc.GetElementsByTagName("temperature");
            XmlNodeList desNodeList = doc.GetElementsByTagName("des");

            XmlNode today_weather_node = weather_nodes[0];//讀取某一父節點下的子節點
            XmlNode today_wind_node = wind_nodes[0];
            XmlNode today_temperature_node = temperature_nodes[0];
            XmlNode desNode1 = desNodeList[0];
            XmlNode desNode2 = desNodeList[5];
            return today_weather_node.InnerText + " " + today_wind_node.InnerText + " " +
                today_temperature_node.InnerText + "。" + desNode1.InnerText +
                desNode2.InnerText;
        }

第二種:簡單的XML文檔,如微信API返回的
這裏寫圖片描述
這種XML沒有節點,我們直接讀取想要的字段的值。
代碼如下,postStr就是返回的XML字符串,RequestXML是一個有很多字段屬性的類:

 public void Handle(string postStr)
        {
            //封裝請求類  
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(postStr);
            XmlElement rootElement = doc.DocumentElement;//應該是讓rootElement這個對象可以訪問doc的單行
            //MsgType  
            XmlNode MsgType = rootElement.SelectSingleNode("MsgType");
            //接收的值--->接收消息類(也稱爲消息推送)  
            RequestXML requestXML = new RequestXML();
            requestXML.ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText;//選擇單行,並轉換成字符串
            requestXML.FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText;
            requestXML.CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText;
            requestXML.MsgType = MsgType.InnerText;}

以上就是對API的調用,接受返回的數據,讀取返回的數據,並對Xml的解析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章