C#基礎知識-XML介紹及基本操作(十)

来源:http://www.cnblogs.com/leonliuyifan/archive/2017/06/18/7044438.html
-Advertisement-
Play Games

在講了一系列的基礎文檔之後,現在開始講一些實例。對於一些數據不是很大的程式,或者只是一些配置文件,需要本地存儲的,完全可以使用XML代替資料庫,因為只是去操作單個文件會比操作資料庫要簡單很多,在程式中訪問和操作XML一般使用DOM(文檔對象模型)和流模式。DOM運行編輯和更新XML文檔,可以隨機訪問 ...


在講了一系列的基礎文檔之後,現在開始講一些實例。對於一些數據不是很大的程式,或者只是一些配置文件,需要本地存儲的,完全可以使用XML代替資料庫,因為只是去操作單個文件會比操作資料庫要簡單很多,在程式中訪問和操作XML一般使用DOM(文檔對象模型)和流模式。DOM運行編輯和更新XML文檔,可以隨機訪問文檔中的數據,但有一個缺點,就是在載入XML的時候是會吧整個文檔的載入進記憶體中。流模式很好的解決了這個問題,在對XML文件訪問採用的是流的概念,任何時候在記憶體中只有當前介面,不足的地方是它是只讀的,僅向前,不能再文檔中去向後編輯增加。

XML(Extensible Markup Language)可擴展的標記語言,XML和HTML有很多地方都非常的類似,但HTML的語法不夠嚴密,很鬆散,很多的格式沒有強制的要求所以尤其在處理瀏覽器相容的問題上需要費很大的心思啊,我特別有體會,很多不同的網站系統對瀏覽器就有要求,標準不統一,所以電腦上谷歌、火狐、360…..一大堆的瀏覽器就是為了適應不同的網站相容的問題,XML有著嚴格的格式要求,比如要求元素必須是一對對顯示的,XML還有一個很重要的特性就是通用性高,很多的程式包括Web和App底層數據交換都是轉換成XML來進行數據交換的。

 

下麵來看一個簡單的XML文檔:

 1 <?xml version="1.0" encoding="utf-8" standalone=”yes”?>
 2 
 3 <!—下麵是學生名單-->
 4 
 5 <學生名單>
 6 
 7   <學生  id=”1”>
 8 
 9     <學號>201701</學號>
10 
11 <姓名>張三三</姓名>
12 
13 <班級>0102</班級>
14 
15   </學生>
16 
17   <學生  id=”2”>
18 
19     <學號>201702</學號>
20 
21 <姓名>李四四</姓名>
22 
23 <班級>0102</班級>
24 
25   </學生>
26 
27   <學生  id=”3”>
28 
29     <學號>201703</學號>
30 
31 <姓名>王五五</姓名>
32 
33 <班級>0103</班級>
34 
35   </學生>
36 
37 </學生名單>

 

1.文檔頭部聲明:

<?xml version="1.0" encoding="utf-8" ?>

?XML標記說明它是一個XML文檔,version為版本號,encoding屬性表明是編碼格式為”utf-8”,standalone取”yes”時,表明該文件未引用其它外部文件。

 

2.註釋:

<!--下麵是學生名單-->

   註釋的格式和html類似:<!--“註釋的內容”-->,使用註釋時需要註意:1.註釋不可以出現在XML聲明之前.2.註釋中不可以出現”--”字元,如:<!--下麵是學生--名單> 3.註釋不可以嵌套.

 

3.根元素:

<學生名單>  XXX  </學生名單>

每個文檔必須有有一個根元素,沒有根元素將會在解析的時候出現錯誤

 

4.元素(標記),是XML中用來定義數據的一個基本的單位,元素是由標記要定義的,同時標記分為非空標記和空標記:

 

(1)非空標記

<學號>201701</學號>

<姓名>張三三</姓名>

<班級>0102</班級>

非空即當標記中包含有內容,格式為:<標記>內容<標記>

(2)空標記

<學生 id=”1”></學生>

空標記中只有屬性,兩個標簽中的內容是為空的。

 

XML位於System.Xml命名空間,以下為XML結構列表:

標 記

描 述

XmlDocument

XML文檔

XmlNode

XML中單個的節點,如<學生名單>

XmlAttribute

XML元素中的屬性

XmlText

表示元素或屬性的文本內容

XmlElement

最小元素,如<姓名>張三三</姓名>

XmlComment

表示XML註釋的內容

XmlDeclaration

XML文檔第一行的聲明

 

 

 

 

 

 

 

 

 

 

 

 

XML文檔的創建

最終效果:

<?xml version="1.0" encoding="UTF-8"?>

<學生名單>

  <學生 id="1">

    <姓名>張三三</姓名>

  </學生>

</學生名單>

代碼:

 1 //創建一個XML文檔對象
 2 
 3 XmlDocument doc = new XmlDocument();
 4 
 5 //聲明XML頭部信息
 6 
 7 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
 8 
 9 //添加進doc對象子節點
10 
11 doc.AppendChild(dec);
12 
13 //創建根節點
14 
15 XmlElement root = doc.CreateElement("學生名單");
16 
17 doc.AppendChild(root);
18 
19  
20 
21 //再創建根節點下的子節點
22 
23 XmlElement student = doc.CreateElement("學生");
24 
25 //設置子節點屬性
26 
27 student.SetAttribute("id", "1");
28 
29 //子節點下再創建標記
30 
31 XmlElement studentName = doc.CreateElement("姓名");
32 
33 //<姓名>的內容
34 
35 XmlText xmlText = doc.CreateTextNode("張三三");
36 
37 //將內容添加到<姓名>標記
38 
39 studentName.AppendChild(xmlText);
40 
41 //再將<姓名>標記添加到<學生>標記的子節點下
42 
43 student.AppendChild(studentName);
44 
45 //最後把<學生>標記添加到根節點<學生名單>子節點下
46 
47 root.AppendChild(student);
48 
49 //doc文檔對象保存寫入
50 
51 doc.Save("Student.xml");

 

 XML文檔的讀取

C#中XML讀取有三種方式,XmlDocument,XmlTextReader,Linq to Xml,這幾種方式中我個人習慣是用Linq,因為Linq去讀取、篩選都會很方便,但是由於還沒有寫關於Linq的文章,這裡我們使用XmlDocument的方式。

 1 XmlDocument doc = new XmlDocument();
 2 
 3 //載入根目錄下XML文件
 4 
 5 doc.Load("XMLFile1.xml");
 6 
 7 //獲取根節點
 8 
 9 XmlElement root = doc.DocumentElement;
10 
11 //獲取<學生>子節點
12 
13 XmlNodeList personNodes = root.GetElementsByTagName("學生");
14 
15 //使用foreach迴圈讀出集合
16 
17 foreach (XmlNode node in personNodes)
18 
19 {
20 
21     string id = ((XmlElement)node).GetAttribute("id");
22 
23     string name = ((XmlElement)node).GetElementsByTagName("姓名")[0].InnerText;
24 
25     string number = ((XmlElement)node).GetElementsByTagName("學號")[0].InnerText;
26 
27     string _class = ((XmlElement)node).GetElementsByTagName("班級")[0].InnerText;
28 
29     Console.WriteLine("學生Id:{0},姓名:{1},學號:{2},班級:{3}", id, name, number, _class);
30 
31 }
32 
33 Console.ReadKey();

 

 增加

 

 1 string  xmlPath = "XMLFile1.xml";
 2 
 3 XmlDocument doc = new XmlDocument();
 4 
 5 //載入根目錄下XML文件
 6 
 7 doc.Load(xmlPath);
 8 
 9 //獲取根節點
10 
11 XmlElement root = doc.DocumentElement;
12 
13  
14 
15 XmlElement student = doc.CreateElement("學生");
16 
17 student.SetAttribute("id", "4");
18 
19 //添加姓名標記
20 
21 XmlElement studentName = doc.CreateElement("姓名");
22 
23 XmlText xmlText = doc.CreateTextNode("小明");
24 
25 studentName.AppendChild(xmlText);
26 
27 //添加學號標記
28 
29 XmlElement studentNumber = doc.CreateElement("學號");
30 
31 XmlText xmlText2 = doc.CreateTextNode("201704");
32 
33 studentNumber.AppendChild(xmlText2);
34 
35 //添加班級標記
36 
37 XmlElement studentClass = doc.CreateElement("班級");
38 
39 XmlText xmlText3 = doc.CreateTextNode("0102");
40 
41 studentClass.AppendChild(xmlText3);
42 
43  
44 
45 //將上面創建的標記添加到<學生>標記
46 
47 student.AppendChild(studentName);
48 
49 student.AppendChild(studentNumber);
50 
51 student.AppendChild(studentClass);
52 
53  
54 
55 //將上面創建的標記添加到<學生名單>根標記
56 
57 root.AppendChild(student);
58 
59  
60 
61 //最後一步不要忘記了保存
62 
63 doc.Save(xmlPath);

 

 

 

 

修改

 1 string  xmlPath = "XMLFile1.xml";
 2 
 3 XmlDocument doc = new XmlDocument();
 4 
 5 doc.Load(xmlPath);
 6 
 7 XmlElement root = doc.DocumentElement;
 8 
 9 //篩選出符合條件的標記
10 
11 XmlElement selectEle = (XmlElement)root.SelectSingleNode("/學生名單/學生[@id='4']");
12 
13 //獲取該標記下的子元素
14 
15 XmlElement nameEle = (XmlElement)selectEle.GetElementsByTagName("姓名")[0];
16 
17 //修改<姓名>標記中的內容
18 
19 nameEle.InnerText = "大明";
20 
21 //還是那句話不要忘記保存
22 
23 doc.Save(xmlPath);

 

  

 刪除標記

  刪除和修改類似,也是篩選出符合條件的標記,然後移除 

 1 string  xmlPath = "XMLFile1.xml";
 2 
 3 XmlDocument doc = new XmlDocument();
 4 
 5 doc.Load(xmlPath);
 6 
 7 XmlElement root = doc.DocumentElement;
 8 
 9 //篩選出符合條件的標記
10 
11 XmlElement selectEle = (XmlElement)root.SelectSingleNode("/學生名單/學生[@id='4']");
12 
13 //刪除指定子元素
14 
15 root.RemoveChild(selectEle);
16 
17 //還是那句話不要忘記保存
18 
19 doc.Save(xmlPath);

 


以上就是XML基本的操作方法,當然如果使用Linq to Xml的話會更加的靈活,其它的幾種操作方法有興趣的同學也可以直接研究。
 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近重裝了系統,於是便重新配置了一下終端,使其更符合用戶習慣。 效果如下: 擁有語法高亮,命令行tab補全,自動提示符,顯示Git倉庫狀態等功能。 安裝 首先我們下載的 iTem2 這個軟體,比Mac自帶的終端更加強大。直接官網 http://iterm2.com/ 下載並安裝即可。 配置 將iTe ...
  • yum groups install -y "GNOME Desktop" "Graphical Administration Tools" ...
  • 在實際的系統開發中,我們往往需要一些簡單的的案例代碼,基於此目的我把Winform開發框架中各種閃光點和不錯的功能,有些是我們對功能模塊的簡單封裝,而有些則是引入了一些應用廣泛的開源組件進行集成使用,因此把它們做了一個Demo進行展示,以方便我們隨時瞭解和參考,並能夠快速應用相應的場景到具體的項目中... ...
  • 軟體環境: Win7 x64 SP1 SQL Server 2008r2 Visual Studio 2017 Professional 目標:取出示例資料庫 ReportServer 的表 Roles 中的所有記錄並顯示。 步驟: 一、添加軟體包 使用NuGet添加以下軟體包: ServiceSt ...
  • 一、泛型 假設我要寫個公用的輸出傳入參數的方法(不用泛型),因為萬物皆對象的理由,我先定義一個方法show(object obj),如下麵所示: 執行這個方法 如果傳入的是值類型,值類型轉換為引用類型,我們知道會發生裝箱,這是對性能的損害,想想如果是個集合,就得多次執行裝箱、拆箱操作。如ArrayL ...
  • .net core 填坑記之二目錄問題(獲取當前目錄、創建目錄) ...
  • SqlSugar 4.0 ORM框架的優勢 為了未來能夠更好的支持多庫分散式的存儲,並行計算等功能,將SqlSugar3.x全部重寫,現有的架構可以輕鬆擴展多庫。 源碼下載: https://github.com/sunkaixuan/SqlSugar 1.性能 性能最好的ORM之一,具有超越Dap ...
  • 上一篇中講到XML基本的結構,還有增刪改查的方法,這一篇中我們就來利用XML來完成一個簡單的訂單系統,主要是實現一個簡單學生名單的增刪改查,如果想要應用到實際的環境中建議考慮數據量的問題,如果數據量大使用XML的話會比較耗時,使用SQL的性能會好一些 這裡使用WinForm窗體程式,大致界面如下: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...