C# 讀取 XML 教學|XML 檔案解析與資料處理實作(.NET)|C# 檔案處理系列

更新 發佈閱讀 11 分鐘

在 .NET 開發中,C# XML 解析 是處理外部資料與系統整合的重要技術之一。無論是讀取設定檔、API 回傳資料,或與其他系統交換資料,XML 都是常見格式。本篇將詳細介紹如何使用 C# 讀取 XML 檔案與解析資料,包含節點存取、資料擷取,以及實務上常見的應用方式,讓你快速掌握 XML 檔案處理的核心技巧。


本篇重點:

  • ✔ C# 讀取 XML 檔案教學
  • ✔ XML 節點(Node)與屬性(Attribute)解析
  • ✔ 使用 XmlDocument / XDocument 讀取資料
  • ✔ 常見 XML 資料處理技巧

👉 延伸閱讀:C# TXT 檔案解析教學|讀取文字檔與資料處理完整範例|C# 檔案處理系列


上次財務部門要我們解析txt檔案,財務部門說這是銀行端的紀錄,這次他們有了新的需求,需要記錄我們自己入帳的人員跟款項做對應,方便銷帳以及知道收的款項是否正確,款項缺失時才知道要找誰補回,有了上次的經驗這次就會更簡單,只是紀錄資訊的格式改成XML,但我們整個開發的過程不會改變,那就趕快開始開發工作吧!

這次的需求:

  1. XML檔案裏,USERID是公司的入帳人員,TA是入帳金額,PR1是客戶資訊。XML檔案會有多個,每個都是獨立的交易紀錄。
  2. 請依據每個XML的PR1客戶資訊加總入帳金額,將客戶、客戶加總入帳金額、入同客戶帳的公司人員,這三樣資訊顯示成一列資料,方便財務人員對帳。

銀行端寄來的XML格式範例如下:

<PRq>
<Pq>
<USERID>xxxxx</USERID>
<IDD>0</IDD>
<MsgDate>20230701</MsgDate>
<TDateNo>0000001</TDateNo>
<TDate>20230701</TDate>
<TTime>172400</TTime>
<ANo>xxxxx</ANo>
<AC>TWD</AC>
<Sign>+</Sign>
<TA>0000001500000</TA>
<Type>xxx</Type>
<PR1>xxxxx</PR1>
</Pq>
</PRq>

複製上方格式到記事本裡面,存成XML檔案,並且複製多個把TA(金額)、USEID(入帳人員)、PR1(客戶)改動一下,其它的值不用改動,讓接下來的程式有檔案可以測試邏輯是否正確。

我建議複製10個檔案改動如下:

<USERID>001</USERID><TA>0000001500000</TA><PR1>a01</PR1>
<USERID>002</USERID><TA>0000001000000</TA><PR1>a01</PR1>
<USERID>001</USERID><TA>0000001100000</TA><PR1>a01</PR1>
<USERID>001</USERID><TA>0000001200000</TA><PR1>a02</PR1>
<USERID>003</USERID><TA>0000001300000</TA><PR1>a02</PR1>
<USERID>004</USERID><TA>0000001400000</TA><PR1>a02</PR1>
<USERID>003</USERID><TA>0000001600000</TA><PR1>a03</PR1>
<USERID>002</USERID><TA>0000001700000</TA><PR1>a03</PR1>
<USERID>001</USERID><TA>0000001800000</TA><PR1>a03</PR1>
<USERID>004</USERID><TA>0000001900000</TA><PR1>a04</PR1>

專案開發

語言:asp.net c#

應用程式: windows forms

1 . 建立專案

打開Visual Studio 2022 建立一個asp.net c# windows forms專案,選Windows Forms App(.NET Framework),下一步後按建立。(圖一)

(圖一)

vocus|新世代的創作平台
  • 拉一個button在畫面上提供程式的進入點,以及DataGridView顯示資料。(圖二)

(圖二)

vocus|新世代的創作平台
  • 將拉出來的button1改按鈕本身的名稱,改為start。(圖三)(圖四)

左鍵點一下button1 -> 右邊就會顯示button1的屬性 -> 找到(Name)屬性 -> 修改為start

(圖三)

vocus|新世代的創作平台

(圖四)

vocus|新世代的創作平台
  • 將button1改顯示名稱,改為開始。(圖五)(圖六)

左鍵點一下button1 -> 右邊就會顯示button1的屬性 -> 找到Text屬性 -> 修改為"開始"

(圖五)

vocus|新世代的創作平台

(圖六)

vocus|新世代的創作平台
  • 對(圖六)"開始"按鈕點左鍵兩下,進入程式執行的區塊。(圖七)

因為我們改過名稱,現在程式區塊已經不叫button1_Click而是start_Click。

(圖七)

vocus|新世代的創作平台

補充:

  1. 因為我們有基礎的程式能力了,元件的名稱我們都應該好好命名,不能再直接用預設名稱button1,要依據他的功能命名,因此這邊我們命名為start,這是軟體工程師都會共同遵守的準則。
  2. 按鈕顯示的名稱也要依據功能好好命名,我們這個按鈕就是開始去執行程式碼,所以我們顯示為"開始",假設今天有一個按鈕功能是暫停,就應該顯示為"暫停"。
  3. 屬性(Name)跟Text不同之處在於,(Name)是這個元件在程式碼呼叫時的名稱,Text則是在使用者介面顯示的名稱。

2 . 詢問ChatGPT

  • 語言、框架、功能需求清楚的表達給GPT如下:

asp.net C# windowsform 我的XML格式如下,取得每一個Tag值,且有多個XML檔案,依據PR1裡面相同的值加總TA的值,以及把同PR1不同USERID的值串起來,顯示在dataGridView1。

(這裡要把txt的內容順便貼到ChatGPT,ChatGPT才能準確幫你分析)

  • 取得GPT給的範例,並把範例程式碼放到我們start按下後會執行程式的區塊內,private void start_Click(object sender, EventArgs e)的大括號{}裡面。

(請先用我查到的範例,後續有一定的基礎後可以自己使用GPT查出的範例,以免初學階段看不懂GPT的範例導致學習成效不彰)

private void start_Click(object sender, EventArgs e)
{
string folderPath = @"C:\XMLFolder";
var files = Directory.GetFiles(folderPath, "*.xml");

var allData = files
.SelectMany(file => XDocument.Load(file)
.Descendants("Pq")
.Select(x => new
{
USERID = (string)x.Element("USERID"),
PR1 = (string)x.Element("PR1"),
TA = Convert.ToDecimal((string)x.Element("TA"))
})
)
.ToList();


var result = allData
.GroupBy(x => x.PR1)
.Select(g => new
{
PR1 = g.Key,
TotalTA = g.Sum(x => x.TA),
USERIDs = string.Join(",", g
.Select(x => x.USERID)
.Distinct())
})
.ToList();


DataTable dt = new DataTable();
dt.Columns.Add("PR1");
dt.Columns.Add("TotalTA");
dt.Columns.Add("USERIDs");

foreach (var item in result)
{
dt.Rows.Add(item.PR1, item.TotalTA, item.USERIDs);
}

dataGridView1.DataSource = dt;
}

3 . 測試效果

  • 開始前要在 "C:\XMLFolder" 裡面存一開始我們複製並且有改動數值的xml檔才有辦法正常測試!(圖一)

(圖一)

vocus|新世代的創作平台
  • 執行程式並且按下"開始",結果就會顯示在畫面上!(圖二)

(圖二)

vocus|新世代的創作平台

結論

這篇練習我們為自己開發的程式碼準備了10個測試的檔案,準備測試的資料或檔案也是開發程式相當重要的一個環節,因為在準備跟測試過程中會讓你更了解自己的程式。
在實務上我們每次開發完系統都要花蠻長的一段時間測試,這樣有Bug就能提前發現,使用者才能更順利使用。因此,寫程式碼很重要,但是測試程式的正確性也一樣重要!下一篇我們一樣一起來研究範例程式碼。









留言
avatar-img
ITT Fun
1會員
19內容數
主要內容會教大家如何快速有效轉職到中大型公司內部系統的軟體工程師。 程式真的沒有很困難,不論之前覺得學習太枯燥乏味或是其他因素而放棄或從未開始,這邊會帶給大家不同的體驗。 我們會用實際案例來當作教學主軸,用我親身的經歷讓大家快樂學習程式,過程中可以累積很多程式作品還會提升很多成就感,同時還能增加成功轉職的機會!
ITT Fun的其他內容
2026/05/07
在掌握 C# 讀取 TXT 檔案 之後。本篇將帶你學習 C# TXT 檔案解析進階實務用運,著重在TXT檔案解析後的資料顯示,才能實務上在IT部門確實的幫助到其他部門應用,幫助你從基礎讀取進階到實務應用。 本篇重點: ✔ 實務應用情境(內容顯示) 👉 建議先閱讀 如果你還沒看基礎教學,
Thumbnail
2026/05/07
在掌握 C# 讀取 TXT 檔案 之後。本篇將帶你學習 C# TXT 檔案解析進階實務用運,著重在TXT檔案解析後的資料顯示,才能實務上在IT部門確實的幫助到其他部門應用,幫助你從基礎讀取進階到實務應用。 本篇重點: ✔ 實務應用情境(內容顯示) 👉 建議先閱讀 如果你還沒看基礎教學,
Thumbnail
2026/05/06
在學會使用 C# 讀取 TXT 檔案 之後,下一步就是理解實際的程式碼運作方式。本篇將針對 C# TXT 檔案解析範例 進行完整說明,包含文字檔讀取流程、逐行處理邏輯,以及常見的資料解析技巧,幫助你真正看懂每一段程式碼,而不只是單純使用。 本篇重點: ✔ C# 讀取 TXT 範例程式碼解析
Thumbnail
2026/05/06
在學會使用 C# 讀取 TXT 檔案 之後,下一步就是理解實際的程式碼運作方式。本篇將針對 C# TXT 檔案解析範例 進行完整說明,包含文字檔讀取流程、逐行處理邏輯,以及常見的資料解析技巧,幫助你真正看懂每一段程式碼,而不只是單純使用。 本篇重點: ✔ C# 讀取 TXT 範例程式碼解析
Thumbnail
2026/04/30
在進行資料處理或系統開發時,C# 讀取 TXT 檔案 是非常常見的需求,例如讀取設定檔、日誌檔或匯入簡單資料。本篇將帶你完整學習如何使用 C# 進行 文字檔(TXT)解析與資料讀取,包含常見的 File 讀取方式與 StreamReader 實作範例,幫助你快速掌握 .NET 中處理文字檔案的基本技
Thumbnail
2026/04/30
在進行資料處理或系統開發時,C# 讀取 TXT 檔案 是非常常見的需求,例如讀取設定檔、日誌檔或匯入簡單資料。本篇將帶你完整學習如何使用 C# 進行 文字檔(TXT)解析與資料讀取,包含常見的 File 讀取方式與 StreamReader 實作範例,幫助你快速掌握 .NET 中處理文字檔案的基本技
Thumbnail
看更多
你可能也想看
Thumbnail
Vibe Coding利用 AI 快速生成可互動、可回測的股票分析 POC(概念驗證)。文章詳細說明瞭 Vibe Coding 的定義、適用場景,並提供一個具體的案例,示範如何在 10–30 分鐘內,透過清晰的 Prompt 讓 AI 產生基礎架構,再由人工補齊關鍵細節,實現快速驗證想法的目的。
Thumbnail
Vibe Coding利用 AI 快速生成可互動、可回測的股票分析 POC(概念驗證)。文章詳細說明瞭 Vibe Coding 的定義、適用場景,並提供一個具體的案例,示範如何在 10–30 分鐘內,透過清晰的 Prompt 讓 AI 產生基礎架構,再由人工補齊關鍵細節,實現快速驗證想法的目的。
Thumbnail
前置作業 請確認你已經完成以下安裝: 安裝 Flutter SDK 安裝 Android Studio 或 Visual Studio Code(搭配 Flutter plugin) 設定好 flutter doctor(在終端機執行以下指令): flutter doctor 確保所有項
Thumbnail
前置作業 請確認你已經完成以下安裝: 安裝 Flutter SDK 安裝 Android Studio 或 Visual Studio Code(搭配 Flutter plugin) 設定好 flutter doctor(在終端機執行以下指令): flutter doctor 確保所有項
Thumbnail
六角學院 Vibe Coding課程 課後有感 第一章:AI及vibe coding,是工具 在程式學習的旅程中,我逐漸意識到一個核心觀念:AI與vibe coding,本質上都是工具。工具的存在,並不是為了取代人,而是為了放大人的能力。就像一把鋤頭,它不會自己耕田,但在農夫的手裡,它能讓耕作效
Thumbnail
六角學院 Vibe Coding課程 課後有感 第一章:AI及vibe coding,是工具 在程式學習的旅程中,我逐漸意識到一個核心觀念:AI與vibe coding,本質上都是工具。工具的存在,並不是為了取代人,而是為了放大人的能力。就像一把鋤頭,它不會自己耕田,但在農夫的手裡,它能讓耕作效
Thumbnail
本文探討 AI 及 Vibe Coding 作為學習程式設計輔助工具的潛力,並分享如何在自學與提升個人編程能力上,有效利用這些工具,克服資訊過載、缺乏指引、動力不足等阻礙,模擬協作開發、程式碼審查,甚至自動化任務,最終達成「活用工具,創造差異化價值」。
Thumbnail
本文探討 AI 及 Vibe Coding 作為學習程式設計輔助工具的潛力,並分享如何在自學與提升個人編程能力上,有效利用這些工具,克服資訊過載、缺乏指引、動力不足等阻礙,模擬協作開發、程式碼審查,甚至自動化任務,最終達成「活用工具,創造差異化價值」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News