調用一些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的解析