2008年4月9日 星期三

Step-By-Step教學(6):使用LINQ to XML轉換XML文件

LINQ to XML除了支援利用XSLT樣式表來轉換XML文件這種標準作法之外,還有另一種選擇:利用LINQ to XML的功能結構(Functional construction) 技術來進行轉換。例如你有一份XML文件如下:

利用功能結構(Functional construction)技術將其轉換為以下格式:

為了達到此目標所使用的步驟如下:

1. 建立一個Console程式。

2. 加入以下命名空間:

    1 using System.Xml.Linq;
    2 using System.Xml;
    3 using System.Xml.Xsl;

3. Main方法之中加入以下程式:

   1  XDocument doc =
   2        new XDocument(
   3        new XElement("Employees" ,
   4          new XElement("Employee" , 
   5            new XAttribute("id" , "1") ,
   6            new XElement("Name" , "Vivid Hsu") ,
   7            new XElement("Department" , "SD")) ,
   8          new XElement("Employee" , 
   9            new XAttribute("id" , "2") ,
   10            new XElement("Name" , "Mary Wang") ,
   11            new XElement("Department" , "SE"))
   12      ));
   13 
   14       Console.WriteLine("原始文件===========");
   15       Console.WriteLine(doc.ToString());
   16       doc.Save("EmployeesBefore.xml");
   17       Console.WriteLine();
   18       Console.WriteLine("新文件:============");
   19       XDocument docNew = new XDocument(
   20            new XElement("員工清單" ,
   21                doc.Element("Employees")
   22                .Elements("Employee")
   23                .Select(b => new XElement("員工" ,
   24        new XAttribute("員工編號" , (int)b.Attribute("id")) ,
   25        new XAttribute("名稱" , (string)b.Element("Name")) ,
   26        new XAttribute("部門" , (string)b.Element("Department"))
   27        ))));
   28 
   29       Console.WriteLine(docNew.ToString());
   30       docNew.Save("Employees.xml");

程式說明分解如下:
  • 1-12行先利用XDocument建立原始XML檔案。
  • 14-16行將建立的XML文件印出到主控台,並將之儲存成檔案。
  • 19行建立一個新的XDocument來處理轉換的過程。
  • 20行建立新XML文件的根節點「員工清單」。
  • 21-23行建立「員工清單」標籤之中的「員工」元素,為了將來源XML文件中的Employee元素轉換成「員工」,程式之中利用Select運算子來處理。
  • 24行將「id」代換成「員工編號」。
  • 25-26行將「Name」與「Department」代換成「名稱」與「部門」。
  • 29行將產生的新XML印到主控台。
  • 30行將產生的新XML儲存成一個檔案。


沒有留言:

總瀏覽量