API返回XML文件的解析並取值
阿新 • • 發佈:2019-01-01
呼叫一些API介面的時候,會返回XML或json格式的文件,如果API返回的是XML的文件,可以嘗試這樣來解析,以百度天氣的API為例,下面的程式碼是從訪問到接受返回的資料到解析。
百度天氣的API:http://api.map.baidu.com/telematics/v3/weather?location=武漢&ak=8IoIaU655sQrs95uMWRWPDIa
訪問它會返回這樣的資料,是XML格式。
下面就是完整的程式碼。
第一種:這種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的解析