大家有沒有這樣的感受,一涉及XML文檔操作就得百度一遍。是不是非!常!煩!。各種類型,各種方法,更別提為了找到一個節點多費勁。本來想寫個XML操作的工具方法,寫了兩行一想既然XML文檔是有規律的,如果抽象成一個樹形結構的類,查找節點是不是就可以用lambda了,創建修改都是操作類,那不是好用得飛起! ...
大家有沒有這樣的感受,一涉及XML文檔操作就得百度一遍。是不是非!常!煩!。各種類型,各種方法,更別提為了找到一個節點多費勁。本來想寫個XML操作的工具方法,寫了兩行一想既然XML文檔是有規律的,如果抽象成一個樹形結構的類,查找節點是不是就可以用lambda了,創建修改都是操作類,那不是好用得飛起!說乾就乾,經過兩天打磨,終於是大功告成。系統預設的XML文件相關操作我就不吐槽了,來看看怎麼飛起的吧。
設計思路:
寫著好多啊,簡單來說就是把XML標簽分為兩類:XmlChildTag子標簽和XmlBaseTag基礎標簽。子標簽內可以有子標簽列表和基礎標簽列表,所以一個子標簽就可以表示出一個XML文件的根節點。然後一個XmlFile文件類實現XmlDocument到XmlTag標簽類的互相轉換查找等功能。說著太空,上圖:
1.模型定義如下。註意XmlTag是抽象類。
2.文件模型XmlFile(太長,先看下基本定義就行。項目已上github,底下有鏈接。)
內部實現什麼的我就不一一細講了,有興趣的同學去github上看SixAnts.XmlFile項目,註釋應該很詳細了(為了歪果仁我還寫了英文註釋……)。
進入正題,怎麼飛起:
1.創建XML文件
結果
2.讀取XML文件
結果
3.修改內容
結果
4.快速獲取節點(關鍵飛起步驟之一)(為了展示幾個不同的方法看著比較長,實際完成一次查找修改也就兩三行代碼搞定。)
執行前: 執行後:
折騰了兩天,總算是差不多了。核心思想就是把標簽對應成樹形結構的模型類,實現模型類和XmlNode的相互轉換。把類的操作映射為XmlNode的操作。
雖然代碼不多,但是為了合理好用,模型改了兩三次,模型好了其實就可以自由操作了,為了快速高效,加了相關快速獲取方法。我……大概是……為了世界和平吧……
需要看源碼或者想改進的同學看這裡:https://github.com/631320085/SixAnts.XmlFile
想用的同學還可以直接從Nuget里搜索“SixAnts.XmlFile” 或執行命令:Install-Package SixAnts.XmlFile
另外:Nuget里發佈後DLL的註釋都沒了,以後有時間研究下怎麼加,看完也差不多知道怎麼用了吧。有不合理操作會拋出異常(異常沒英文,懶得弄了)不保證沒BUG啊,剛寫好,持續改進中……