基于C#編寫(xiě)一個(gè)操作XML的簡(jiǎn)單類(lèi)庫(kù)XMLHelper
下午寫(xiě)了一個(gè)操作XML
文件的類(lèi)庫(kù),后來(lái)不用了,水篇文章存?zhèn)€檔
整體功能
XMLHelper.cs
主要提供以下功能:
- 加載XML文件:從文件路徑或字符串中加載XML文檔,并返回
XmlDocument
對(duì)象。 - 保存XML文件:將XmlDocument對(duì)象保存為XML文件。
- 讀取XML文件到
DataTable
:將XML文件中的數(shù)據(jù)讀取到DataTable
對(duì)象中。 - 生成XML文件:生成一個(gè)新的XML文件,并指定根節(jié)點(diǎn)名稱(chēng)。
- 從
DataTable
更新XML文件:將DataTable
對(duì)象中的數(shù)據(jù)更新到XML文件中。 - 獲取節(jié)點(diǎn)值:根據(jù)XPath表達(dá)式獲取指定節(jié)點(diǎn)的值。
- 設(shè)置節(jié)點(diǎn)值:根據(jù)XPath表達(dá)式設(shè)置指定節(jié)點(diǎn)的值。
- 獲取屬性值:根據(jù)XPath表達(dá)式和屬性名稱(chēng)獲取指定節(jié)點(diǎn)的屬性值。
- 設(shè)置屬性值:根據(jù)XPath表達(dá)式和屬性名稱(chēng)設(shè)置指定節(jié)點(diǎn)的屬性值。
- 更新文件中的節(jié)點(diǎn)值:根據(jù)文件路徑、XPath表達(dá)式和值更新XML文件中的節(jié)點(diǎn)值。
- 更新文件中的屬性值:根據(jù)文件路徑、XPath表達(dá)式、屬性名稱(chēng)和值更新XML文件中的屬性值。
沒(méi)用 LINQ To XML
語(yǔ)法糖
XMLHelper.cs
using System; using System.Data; using System.Xml; namespace XMLHelper { class XMLHelper { private XmlDocument xmlDoc; public XMLHelper() { xmlDoc = new XmlDocument(); } // 從文件路徑或字符串中加載XML文檔,并返回XmlDocument對(duì)象 public XmlDocument LoadXmlDocumentFromFile(string filePath) { try { xmlDoc.Load(filePath); return xmlDoc; } catch (Exception ex) { Console.WriteLine("Error loading XML document from file: " + ex.Message); return null; } } // 從一個(gè)XML字符串加載XML文檔,并返回XmlDocument對(duì)象 public XmlDocument LoadXmlDocumentFromString(string xmlString) { try { xmlDoc.LoadXml(xmlString); return xmlDoc; } catch (Exception ex) { Console.WriteLine("Error loading XML document from string: " + ex.Message); return null; } } // 保存XML文件:將XmlDocument對(duì)象保存為XML文件 public void SaveXmlDocument(XmlDocument xmlDoc, string filePath) { try { xmlDoc.Save(filePath); } catch (Exception ex) { Console.WriteLine("Error saving XML document: " + ex.Message); } } // 生成一個(gè)新的XML文件,并指定根節(jié)點(diǎn)名稱(chēng) public void GenerateXmlFile(string filePath, string rootElementName) { try { xmlDoc = new XmlDocument(); XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); XmlNode rootNode = xmlDoc.CreateElement(rootElementName); xmlDoc.AppendChild(xmlDeclaration); xmlDoc.AppendChild(rootNode); xmlDoc.Save(filePath); } catch (Exception ex) { Console.WriteLine("Error generating XML file: " + ex.Message); } } /// <summary> /// 讀取XML文件到DataTable:將XML文件中的數(shù)據(jù)讀取到DataTable對(duì)象中 /// </summary> /// <param name="xmlDoc">XmlDocument對(duì)象</param> /// <param name="xpath">節(jié)點(diǎn)集合的 XPath 表達(dá)式 - 例如"/Roots/Child"</param> /// <returns>DataTable對(duì)象</returns> public DataTable ReadXmlToDataTable(XmlDocument xmlDoc,string xpath) { try { DataTable dataTable = new DataTable(); XmlNodeList nodes = xmlDoc.SelectNodes(xpath); foreach (XmlNode node in nodes) { if (dataTable.Columns.Count == 0) { foreach (XmlNode childNode in node.ChildNodes) { dataTable.Columns.Add(childNode.Name, typeof(string)); } } DataRow row = dataTable.NewRow(); foreach (XmlNode childNode in node.ChildNodes) { row[childNode.Name] = childNode.InnerText; } dataTable.Rows.Add(row); } return dataTable; } catch (Exception ex) { Console.WriteLine("Error reading XML document to DataTable: " + ex.Message); return null; } } /// <summary> /// 將DataTable對(duì)象中的數(shù)據(jù)更新到XML文件中 /// </summary> /// <param name="xmlDoc">XmlDocument對(duì)象</param> /// <param name="dataTable">DataTable對(duì)象</param> /// <param name="elementName">子節(jié)點(diǎn)值</param> public void UpdateXmlFromDataTable(XmlDocument xmlDoc, DataTable dataTable,string elementName) { try { xmlDoc.DocumentElement.RemoveAll(); foreach (DataRow row in dataTable.Rows) { XmlElement measurementPointElement = xmlDoc.CreateElement(elementName); foreach (DataColumn column in dataTable.Columns) { XmlElement element = xmlDoc.CreateElement(column.ColumnName); element.InnerText = row[column.ColumnName].ToString(); measurementPointElement.AppendChild(element); } xmlDoc.DocumentElement.AppendChild(measurementPointElement); } } catch (Exception ex) { Console.WriteLine("Error updating XML from DataTable: " + ex.Message); } } // 根據(jù)XPath表達(dá)式獲取指定節(jié)點(diǎn)的值 public string GetNodeValue(XmlDocument xmlDoc, string xpath) { XmlNode node = xmlDoc.SelectSingleNode(xpath); return node?.InnerText; } // 根據(jù)XPath表達(dá)式設(shè)置指定節(jié)點(diǎn)的值 public void SetNodeValue(XmlDocument xmlDoc, string xpath, string value) { XmlNode node = xmlDoc.SelectSingleNode(xpath); if (node != null) node.InnerText = value; } // 根據(jù)XPath表達(dá)式和屬性名稱(chēng)獲取指定節(jié)點(diǎn)的屬性值 public string GetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName) { XmlNode node = xmlDoc.SelectSingleNode(xpath); if (node != null && node.Attributes != null) { XmlAttribute attribute = node.Attributes[attributeName]; return attribute?.Value; } return null; } // 根據(jù)XPath表達(dá)式和屬性名稱(chēng)設(shè)置指定節(jié)點(diǎn)的屬性值 public void SetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName, string value) { XmlNode node = xmlDoc.SelectSingleNode(xpath); if (node != null && node.Attributes != null) { XmlAttribute attribute = node.Attributes[attributeName]; if (attribute != null) attribute.Value = value; } } // 根據(jù)文件路徑、XPath表達(dá)式和值更新XML文件中的節(jié)點(diǎn)值 public void UpdateNodeValueInFile(string filePath, string xpath, string value) { XmlDocument doc = LoadXmlDocumentFromFile(filePath); if (doc != null) { SetNodeValue(doc, xpath, value); SaveXmlDocument(doc, filePath); } } // 根據(jù)文件路徑、XPath表達(dá)式、屬性名稱(chēng)和值更新XML文件中的屬性值 public void UpdateAttributeValueInFile(string filePath, string xpath, string attributeName, string value) { XmlDocument doc = LoadXmlDocumentFromFile(filePath); if (doc != null) { SetAttributeValue(doc, xpath, attributeName, value); SaveXmlDocument(doc, filePath); } } } }
異常處理就需要大家自由發(fā)揮了
加載和保存XML文件
XMLHelper
類(lèi)庫(kù)提供了兩個(gè)方法,用于從文件路徑或字符串中加載XML文檔并返回XmlDocument
對(duì)象,分別是:
public XmlDocument LoadXmlDocumentFromFile(string filePath)
public XmlDocument LoadXmlDocumentFromString(string xmlString)
可以使用這些方法將XML文件加載到XmlDocument
對(duì)象中,方便后續(xù)的處理和操作,一個(gè)操作文件,一個(gè)操作XML結(jié)構(gòu)的字符串,然后保存:
public void SaveXmlDocument(XmlDocument xmlDoc, string filePath)
這幾個(gè)都是調(diào)用直接的方法,沒(méi)什么可說(shuō)的。
讀取和更新XML文件
XMLHelper
類(lèi)庫(kù)使得從XML文件中讀取數(shù)據(jù)變得非常簡(jiǎn)單。其中,ReadXmlToDataTable
方法允許將XML文件中的數(shù)據(jù)讀取到DataTable
對(duì)象中:
public DataTable ReadXmlToDataTable(XmlDocument xmlDoc, string xpath)
只需要提供XmlDocument
對(duì)象和節(jié)點(diǎn)集合的XPath
表達(dá)式(例如"/Roots/Child"
),即可將XML文件中的數(shù)據(jù)讀取到DataTable
對(duì)象中。
另外,可以使用UpdateXmlFromDataTable
方法將DataTable
對(duì)象中的數(shù)據(jù)更新到XML文件中:
public void UpdateXmlFromDataTable(XmlDocument xmlDoc, DataTable dataTable, string elementName)
這個(gè)方法會(huì)清空XML文件并根據(jù)DataTable
對(duì)象中的數(shù)據(jù)創(chuàng)建新的XML節(jié)點(diǎn),并將其添加到XmlDocument
對(duì)象中。
示例用法
// 創(chuàng)建XMLHelper對(duì)象 XMLHelper xmlHelper = new XMLHelper(); // 加載XML文件 XmlDocument xmlDoc = xmlHelper.LoadXmlDocumentFromFile("data.xml"); // 讀取XML數(shù)據(jù)到DataTable DataTable dataTable = xmlHelper.ReadXmlToDataTable(xmlDoc, "/Root/Element"); // 修改節(jié)點(diǎn)的值 dataTable.Rows[0]["Value"] = "New Value"; // 更新XML文件 xmlHelper.UpdateXmlFromDataTable(xmlDoc, dataTable, "Element"); // 保存XML文件 xmlHelper.SaveXmlDocument(xmlDoc, "data.xml");
讀取和更新XML節(jié)點(diǎn)的值
XMLHelper
還提供了一些方法用于讀取和更新XML節(jié)點(diǎn)的值。以下是其中幾個(gè)方法的示例:
string GetNodeValue(XmlDocument xmlDoc, string xpath) public void SetNodeValue(XmlDocument xmlDoc, string xpath, string value) public string GetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName) public void SetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName, string value)
這些方法允許你根據(jù)XPath
表達(dá)式獲取節(jié)點(diǎn)的文本值或?qū)傩灾担⑶铱梢愿鹿?jié)點(diǎn)的文本值或?qū)傩灾怠?/p>
示例用法
// 創(chuàng)建XMLHelper對(duì)象 XMLHelper xmlHelper = new XMLHelper(); // 加載XML文件 XmlDocument xmlDoc = xmlHelper.LoadXmlDocumentFromFile("data.xml"); // 讀取節(jié)點(diǎn)的值 string nodeValue = xmlHelper.GetNodeValue(xmlDoc, "/Root/Element/Value"); Console.WriteLine("Node Value: " + nodeValue); // 更新節(jié)點(diǎn)的值 string newValue = "New Value"; xmlHelper.SetNodeValue(xmlDoc, "/Root/Element/Value", newValue); Console.WriteLine("Node Value updated."); // 保存XML文件 xmlHelper.SaveXmlDocument(xmlDoc, "data.xml");
生成XML文件
除了加載、讀取和更新XML文件,XMLHelper類(lèi)庫(kù)還提供了一個(gè)方法用于生成XML文件。你可以使用GenerateXmlFile
方法創(chuàng)建一個(gè)空的XML文件,指定根元素的名稱(chēng)和文件路徑:
public void GenerateXmlFile(string filePath, string rootElementName)
這個(gè)有點(diǎn)瑕疵,后面用到再改哈。
設(shè)計(jì)思路
ChatGPT did this :
LoadXmlDocumentFromFile(string filePath): XmlDocument
- 功能:從指定文件路徑加載XML文檔。
- 輸入:文件路徑。
- 輸出:加載成功返回XmlDocument對(duì)象,加載失敗返回null。
- 設(shè)計(jì)思路:使用XmlDocument的
Load
方法從文件路徑加載XML文檔,如果加載失敗,則返回null。
LoadXmlDocumentFromString(string xmlString): XmlDocument
- 功能:從指定字符串加載XML文檔。
- 輸入:XML字符串。
- 輸出:加載成功返回XmlDocument對(duì)象,加載失敗返回null。
- 設(shè)計(jì)思路:使用XmlDocument的
LoadXml
方法從字符串加載XML文檔,如果加載失敗,則返回null。
GenerateXmlFile(string filePath, string rootElementName): void
- 功能:生成一個(gè)新的XML文件,并指定根節(jié)點(diǎn)名稱(chēng)。
- 輸入:文件路徑,根節(jié)點(diǎn)名稱(chēng)。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:創(chuàng)建一個(gè)新的XmlDocument對(duì)象,并使用指定的根節(jié)點(diǎn)名稱(chēng)創(chuàng)建根節(jié)點(diǎn)。然后使用XmlDocument的
Save
方法將XmlDocument對(duì)象保存為指定文件路徑的XML文件。
SaveXmlDocument(XmlDocument xmlDoc, string filePath): void
- 功能:將XmlDocument對(duì)象保存為XML文件。
- 輸入:XmlDocument對(duì)象,文件路徑。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:使用XmlDocument的
Save
方法將XmlDocument對(duì)象保存為指定文件路徑的XML文件。
ReadXmlToDataTable(XmlDocument xmlDoc): DataTable
- 功能:將XML文件中的數(shù)據(jù)讀取到DataTable對(duì)象中。
- 輸入:XmlDocument對(duì)象。
- 輸出:讀取成功返回DataTable對(duì)象,讀取失敗返回null。
- 設(shè)計(jì)思路:使用XmlDocument的
SelectNodes
方法選取指定XPath表達(dá)式的節(jié)點(diǎn)集合,遍歷節(jié)點(diǎn)集合,并根據(jù)節(jié)點(diǎn)的子節(jié)點(diǎn)創(chuàng)建DataTable的列。然后遍歷每個(gè)節(jié)點(diǎn),將子節(jié)點(diǎn)的名稱(chēng)和文本內(nèi)容作為DataTable的行數(shù)據(jù)。最后返回DataTable對(duì)象。
UpdateXmlFromDataTable(XmlDocument xmlDoc, DataTable dataTable, string elementName): void
- 功能:將DataTable對(duì)象中的數(shù)據(jù)更新到XML文件中。
- 輸入:XmlDocument對(duì)象,DataTable對(duì)象,要更新的節(jié)點(diǎn)元素名稱(chēng)。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:首先清空XmlDocument的根節(jié)點(diǎn)下的所有子節(jié)點(diǎn)。然后遍歷DataTable的每一行,創(chuàng)建一個(gè)新的XmlElement,并根據(jù)DataTable的列名和行數(shù)據(jù)設(shè)置XmlElement的子節(jié)點(diǎn)。最后將新的XmlElement添加到XmlDocument的根節(jié)點(diǎn)下。
GetNodeValue(XmlDocument xmlDoc, string xpath): string
- 功能:根據(jù)XPath表達(dá)式獲取指定節(jié)點(diǎn)的值。
- 輸入:XmlDocument對(duì)象,XPath表達(dá)式。
- 輸出:節(jié)點(diǎn)的值,如果節(jié)點(diǎn)不存在則返回null。
- 設(shè)計(jì)思路:使用XmlDocument的
SelectSingleNode
方法根據(jù)XPath表達(dá)式選取指定節(jié)點(diǎn),然后返回節(jié)點(diǎn)的InnerText。
SetNodeValue(XmlDocument xmlDoc, string xpath, string value): void
- 功能:根據(jù)XPath表達(dá)式設(shè)置指定節(jié)點(diǎn)的值。
- 輸入:XmlDocument對(duì)象,XPath表達(dá)式,要設(shè)置的值。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:使用XmlDocument的
SelectSingleNode
方法根據(jù)XPath表達(dá)式選取指定節(jié)點(diǎn),然后將節(jié)點(diǎn)的InnerText設(shè)置為指定的值。
GetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName): string
- 功能:根據(jù)XPath表達(dá)式和屬性名稱(chēng)獲取指定節(jié)點(diǎn)的屬性值。
- 輸入:XmlDocument對(duì)象,XPath表達(dá)式,屬性名稱(chēng)。
- 輸出:屬性的值,如果屬性不存在則返回null。
- 設(shè)計(jì)思路:使用XmlDocument的
SelectSingleNode
方法根據(jù)XPath表達(dá)式選取指定節(jié)點(diǎn),然后根據(jù)屬性名稱(chēng)獲取屬性的值。
SetAttributeValue(XmlDocument xmlDoc, string xpath, string attributeName, string value): void
- 功能:根據(jù)XPath表達(dá)式和屬性名稱(chēng)設(shè)置指定節(jié)點(diǎn)的屬性值。
- 輸入:XmlDocument對(duì)象,XPath表達(dá)式,屬性名稱(chēng),要設(shè)置的值。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:使用XmlDocument的
SelectSingleNode
方法根據(jù)XPath表達(dá)式選取指定節(jié)點(diǎn),然后根據(jù)屬性名稱(chēng)設(shè)置屬性的值。
UpdateNodeValueInFile(string filePath, string xpath, string value): void
- 功能:根據(jù)文件路徑、XPath表達(dá)式和值更新XML文件中的節(jié)點(diǎn)值。
- 輸入:文件路徑,XPath表達(dá)式,要設(shè)置的值。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:首先從文件路徑加載XML文檔,然后調(diào)用SetNodeValue函數(shù)設(shè)置指定節(jié)點(diǎn)的值,最后保存XML文檔到文件。
UpdateAttributeValueInFile(string filePath, string xpath, string attributeName, string value): void
- 功能:根據(jù)文件路徑、XPath表達(dá)式、屬性名稱(chēng)和值更新XML文件中的屬性值。
- 輸入:文件路徑,XPath表達(dá)式,屬性名稱(chēng),要設(shè)置的值。
- 輸出:無(wú)。
- 設(shè)計(jì)思路:首先從文件路徑加載XML文檔,然后調(diào)用SetAttributeValue函數(shù)設(shè)置指定節(jié)點(diǎn)的屬性值,最后保存XML文檔到文件。
到此這篇關(guān)于基于C#編寫(xiě)一個(gè)操作XML的簡(jiǎn)單類(lèi)庫(kù)XMLHelper的文章就介紹到這了,更多相關(guān)C#操作XML內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)IDisposable接口釋放非托管資源
這篇文章主要為大家介紹了C#實(shí)現(xiàn)IDisposable接口釋放非托管資源,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05C#實(shí)現(xiàn)計(jì)算一個(gè)點(diǎn)圍繞另一個(gè)點(diǎn)旋轉(zhuǎn)指定弧度后坐標(biāo)值的方法
這篇文章主要介紹了C#實(shí)現(xiàn)計(jì)算一個(gè)點(diǎn)圍繞另一個(gè)點(diǎn)旋轉(zhuǎn)指定弧度后坐標(biāo)值的方法,涉及C#針對(duì)坐標(biāo)的數(shù)學(xué)運(yùn)算相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C# 中實(shí)現(xiàn)ftp 圖片上傳功能(多快好省)
這篇文章主要介紹了C# 中實(shí)現(xiàn)ftp 圖片上傳功能(多快好省),需要的朋友可以參考下2017-06-06C#實(shí)現(xiàn)程序開(kāi)機(jī)啟動(dòng)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)程序開(kāi)機(jī)啟動(dòng)的方法,涉及C#針對(duì)應(yīng)用程序及注冊(cè)表的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06C#抓取網(wǎng)絡(luò)圖片保存到本地的實(shí)現(xiàn)方法
下面小編就為大家分享一篇C#抓取網(wǎng)絡(luò)圖片保存到本地的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文方法合集
這篇文章介紹了C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文的方法合集,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02