XML檔案處理

  • 631
  • 0
  • 2019-09-04

過往的資料處理都是跟Json交手,近來第一次遇到處理XML檔的需求。
有可能是小妹太孤陋寡聞,總之這是一個資料結構高達 1x 層的XML檔(從沒看過這麼可怕的),需求只是簡單的針對該檔案做資料備份。
基於狀況上的諸多考量,本只打算將該XML檔以Excel開啟後的二維結構去做存放,不花費太多時間去處理複雜的資料結構。
中間遇到一些困難,所以研究了下一般對XML檔的處理方式,以此整理及備記。

-------------------------------------------------------------------------------------------------------------------

在C#提供處理XML的類別有XmlDocument、XDocument、XmlReader、XmlSerializer等,改日再詳究。

 

Convert XML into DataSet.

using System.Xml;

DataSet ds = new DataSet();
ds.ReadXml(xmlFilePath);

using System.Xml後,可以 DataSet 的 ReadXml Method 讀入Xml檔的資料,輕鬆取得DataSet格式資料.

如果Xml檔本身的資料結構包含多層,也會自動切割成多張DataTable ( 以此次 1x 層的Xml為例 ... 就會得到一個裡面有 1x 個DataTable的 DataSet ... )

對正常的需求來說,處理資料真的方便很多 !

( 只是以此次來說,不想開 1x 張資料表 ... )

ReadXml含8種多載,就不一一介紹,可參閱 DataSet.ReadXml Method 

 

Convert XML to Array

  1. use Linq to XML
    讀取XML檔內容轉為xDocument,以Linq整理成Array的格式
    XDocument productXML = XDocument.Parse(xmlData);
    var productArray = productXML.Root.Select(x => x.productName).ToArray();
    

     

  2. XML serialization
    XmlSerializer ser = new XmlSerializer(typeof(Configuration));
    using (TextReader reader = new StringReader(xmlData))
    {
        Configuration result = (Configuration)serializer.Deserialize(reader);
    }

     

XML to Excel

找了好一陣子,好像沒有看到什麼可以簡單方便的辦法。

以下有幾種處理方式

  1. 將XML讀為DataSet後,自己建立Excel檔案,自行統整寫入。
  2. XSLT 可延伸樣式表轉換語言(Extensible Stylesheet Language Transformations)
    尚未測試
  3. 套件Spire.Xls
    using Spire.Xls;
    
    Workbook wb = new Workbook; 
    wb.LoadFromXml(xmlFilePath); 
    wb.SaveToFile(exelFilePath,ExcelVersion.Version2013);
    此次不考慮套件,所以沒有使用,僅留個記錄。
    如有興趣,詳細請見參考資料「Excel與XML相互轉換-C 簡單實現方案
  4. 自己後來的處理方式是先用Excel開啟XML後,另存Excel檔,並不是最佳解,只是對此次狀況方便處理的解法而已。
    但伺服器必須有安裝Excel,另有設定xlApp.Visible = true;時才能看到Excel。
    Excel.Application xlApp = new Excel.ApplicationClass();
    Excel.Workbook xlWorkBook;
    
    object oMissing = System.Reflection.Missing.Value;
    
    xlWorkBook = xlApp.Workbooks.OpenXML(path, oMissing, Excel.XlXmlLoadOption.xlXmlLoadImportToList);
    xlWorkBook.SaveAs(excelPath);
    
    xlWorkBook.Close();
    xlApp.Quit();
    xlApp = null;

     

 

參考資料 : 

C# .xml to .xlsx how ? 

Excel與XML相互轉換-C 簡單實現方案

Convert XML to array C#

Merge XML Dataset Datatables into one Datatable

Convert XML File to Excel File

How to create Excel file from XML

DataSet.ReadXml Method

[C#][筆記]將Xml字串轉成Data Table

Convert Xml to DataTable