[ASP.NET][C#] Xml 基本讀取(1)

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