2010年7月23日

[C#] - XML 讀取

今天要介紹的是XML讀取
XML設計用來傳送及攜帶資料資訊,不用來表現或展示資料,HTML語言則用來表現資料,所以XML用途的焦點是它說明資料是什麼,以及攜帶資料資訊。

1.豐富檔案(Rich Documents)- 自定檔案描述並使其更豐富
*屬於檔案為主的XML技術應用
*標記是用來定義一份資料應該如何呈現
2.後設資料(Metadata)- 描述其它檔案或網路資訊
*屬於資料為主的XML技術應用
*標記是用來說明一份資料的意義
3.設定檔案(Configuration Files)- 描述軟體設定的參數

XML的格式很多樣!!今天介紹比較常見的兩種

第一種:
<YC>
  <Class test="A" Name="B"/>
  <Class test="C" Name="D"/>
</YC>
假設有一個這樣子的XML檔案,我們要如何讀取他呢?

其實不困難,.net 2.0中有提供一個xmlreader的功能!!

可以用來讀取XML的資料

public void LoadXML()
        {
            XmlReaderSettings setting = new XmlReaderSettings();//XML讀取設定
            setting.IgnoreComments = true;
            setting.IgnoreWhitespace = true;
            setting.ValidationType = ValidationType.None;
            try
            {
                XmlReader reader = XmlTextReader.Create("YC.xml", setting);
                while (reader.Read())
                    if (reader.NodeType == XmlNodeType.Element)
                        if (reader.LocalName.Equals("Class"))
                        {
                            reader["test"];//讀取test的值
       reader["Name"];//讀取Name的值
                        }
            }
            catch (Exception xmlex){}
        }

第二種:
<YC>
  <Class>
     <test>A</test>
     <Name>B</Name>
  </Class>
  <Class>
     <test>C</test>
     <Name>D</Name>
  </Class>
</YC>

假設有一個這種階層式的XML,也是可以透過xmlreader來讀取他!!

public void LoadXML(string xml)
        {
     XmlReaderSettings setting = new XmlReaderSettings();
            setting.IgnoreComments = true;
            setting.IgnoreWhitespace = true;
            setting.ValidationType = ValidationType.None;
            try
            {
                Stream s = new MemoryStream(UTF8Encoding.UTF8.GetBytes(xml));//把字串的xml轉成stream
                XmlReader reader = XmlTextReader.Create(s, setting);
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element&&reader.NodeType!=XmlNodeType.EndElement)//偵測標籤為<item>的格式
                    {
                        if (reader.LocalName.Equals("Class"))
                        {
                            while (reader.Read())
                            {
                                if (reader.LocalName.Equals("Class"))
                                    break;
                                if (reader.NodeType == XmlNodeType.Element)
                                    switch (reader.LocalName)
                                    {
                                        case "test":
                                            reader.ReadString();//取得test的值
                                            break;
                                        case "Name":
                                            reader.ReadString();//取得Name的值
                                            break;
                                    }
                                reader.MoveToNextAttribute();//把讀寫頭移到下一個標籤
                            }
                        }
                    }
                }
            }
            catch (XmlException xmlex) { }
 }

這個code使用的是抓取到xml的字串,再將字串轉成stream,再放入xmlreader裡!!
P.S.如果是使用中文字的話,建議是把編碼改成utf-8,比較不易出錯!!

上述兩種不同的XML格式,在讀取時也有一點點小小的差異。不過方法大同小異!!

由於XML的格式甚多,而且每個case都有小小的不同,在讀取時要稍作調整!

上述若有寫錯或寫得不好還請提出修正^^

2010/07/23 By YC

參考出處:
1.Wiki XML
2.最簡單 xml 格式文字檔 (讀寫範例)
3.從檔案讀取 XML (Visual C#)

1 則留言:

  1. 我想寫程式可以找您MSN詳談嗎?
    kissshout@hotmail.com

    回覆刪除