XML檔案基本讀取
有一天管管說,網站上要有天氣預報,畫面要美,資訊要準確!
我想去外面撈就好了,如以前開始去找別人寫好iframe撈回來!沒想到 ... 找不出半個還差點吃土。
於是乖乖的去撈中央氣象局open data,開啟了啃XML文件之路。本來以為可以簡簡單單結束,但事情沒有憨人想的簡單 ...
本文有全檔讀取與個別節點讀取
範例XML,檔名為XMLPractice1.xml
<?xml version="1.0" encoding="utf-8" ?>
<A>
<B b1="台灣北邊">
<C c1="東京">JAPAN</C>
</B>
<B b1="台灣本島" >
<C c1="台北">TAIWAN</C>
<C c1="台南">TAIWAN</C>
</B>
<B b1="台灣西邊">
<C c1="北京">CHINA</C>
</B>
</A>
XML節點逐層全讀取,有第四層請自行新增迴圈
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("WeatherXML/XMLPractice1.xml"));//載入xml檔
XmlNode xn = xmlDoc.SelectSingleNode("A");
//顯示根目錄(A層)下第一層(B層)的所有屬性值
XmlNodeList xnlA = xn.ChildNodes;
foreach (XmlNode xnA in xnlA)
{
XmlElement xeB = (XmlElement)xnA;
Response.Write(xeB.GetAttribute("b1"));
//顯示根目錄(B層)下第一層(C層)的所有屬性值
XmlNodeList xnlB = xeB.ChildNodes;
foreach (XmlNode xnB in xnlB)
{
XmlElement xeC = (XmlElement)xnB;
Response.Write(xeC.GetAttribute("c1"));
//顯示子節點點文本
Response.Write(xeC.OuterXml);
Response.Write("<p><p/>");
}
}
XML個別節點讀取
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("WeatherXML/XMLPractice1.xml"));//載入xml檔
//找node InnerText無指定字串,會列出所有C1 的值
//string xPathExpression1 = "/A/B/C";
//找node InnerText裡有指定字串'TAIWAN'
string xPathExpression1 = "/A/B/C[.='TAIWAN']";
XmlNodeList xmlNL = xmlDoc.SelectNodes(xPathExpression1); //找多節點存入清單
foreach (XmlNode item in xmlNL)
{
Response.Write(string.Format("節點[C1]的值(value) 為 {0}。", item.Attributes["c1"].Value));
Response.Write("<br/" + ">");
}
string xPathExpression2 = "/A/B/C[@c1='台北']";//找node屬性有'台北'
XmlNode node = xmlDoc.SelectSingleNode(xPathExpression2);//找單一節點
Response.Write(string.Format("Node [C1]屬性為台北,InnerText(OuterXml) = {0}", node.OuterXml)); //輸出讀取內容
Response.Write("<p>");
參考來源 --MSDN