C# 讀取 XML 檔案內容的程式實例

在處理用程式語言讀取 XML 的過程中,搜尋過一些網路範例;
雖然,有不少範例,卻如無法解決個人的實際需求。
主因是大多數的範例其讀取的 XML 內容,是屬於“正規化”型的資料;也就是 XML 檔案除了根元素外,就是一階式的資料。
而 XML 資料的實際內容如下:

---------------------------------
<?xml version = "1.0" encoding = "UTF-8" ?>
<videos>
     <head>
         <item>0</item>
         <url></url>
         <name>太古歷史</name>
         <description></description>
         <privacy>public</privacy>
     </head>
     <details>
         <detail>
             <item>1</item>
             <url>https://www.youtube.com/watch?v=b75lPfjI4k8</url>
             <name>第一课:完美的世界</name>
             <description></description>
         </detail>
         <detail>
             <item>2</item>
             <url>https://www.youtube.com/watch?v=Vhi-ZrpnNOY</url>
             <name>第二课:失而复得的乐园</name>
             <description></description>
         </detail>
         。。。。。
     </details>
</videos>
-------------------------------
PS:上述 XML 檔案(video.xml)將會在未來幾篇文章中,再次提及。它將被使用在 YouTube 視頻檔案的管理及應用裡!

從 XML 的內容樣式來看,它具有表頭標籤(head)、表身群標籤(details))、表身標籤(detail)等區塊。
程式要負責將表頭的5個元素、將表身『每一個』節點的4個元素值,加以讀出並存放在公用變數中。

  1. 宣告公用變數
  2. 讀取表頭元素值
  3. 讀取表身每一個節點的元素值

程式如下:

================================

static string PlaylistItem;
static string PlaylistURL;
static string PlaylistName;
static string PlaylistDesc;
static string PlaylistPrivacy;
static int XmlDetailsCnt;
static int XmlDetailElements = 4;
static string[] aryDB;      // 程式中,動態定義陣列大小
static string[,] aryXML;    // 程式中,動態定義陣列大小


// 讀取表頭元素值

static void GetXML_Header(string pXML)
{
     XmlDocument doc = new XmlDocument();
     doc.Load(pXML);

    XmlNodeList nodes = doc.DocumentElement.SelectNodes("/videos/head");

    PlaylistItem = nodes[0].SelectSingleNode("item").InnerText;
     PlaylistURL = nodes[0].SelectSingleNode("url").InnerText;
     PlaylistName = nodes[0].SelectSingleNode("name").InnerText;
     PlaylistDesc = nodes[0].SelectSingleNode("description").InnerText;
     PlaylistPrivacy = nodes[0].SelectSingleNode("privacy").InnerText;
}


// 讀取表身每一個節點的元素值

static void GetXML_Details(string pXML)
{
     XmlDocument doc = new XmlDocument();
     doc.Load(pXML);

    XmlNodeList nodes = doc.DocumentElement.SelectNodes("/videos/details/detail");

    XmlDetailsCnt = nodes.Count;
     aryXML = new string[XmlDetailsCnt, XmlDetailElements];
     aryDB = new string[XmlDetailsCnt];

    int i = 0;
     foreach (XmlNode node in nodes)
     {
         aryXML[i, 0] = node.SelectSingleNode("item").InnerText;
         aryXML[i, 1] = node.SelectSingleNode("url").InnerText;
         aryXML[i, 2] = node.SelectSingleNode("name").InnerText;
         aryXML[i, 3] = node.SelectSingleNode("description").InnerText;

        aryDB[i] = PaserVideoID(aryXML[i, 1]);

        i = i + 1;
     }
}

================================

沒有留言: