手寫Vue2.0原始碼(八)-元件原理
在大資料專案開發過程中,ETL(Extract-Transform-Load)是必不可少。即便目前 JSON 非常流行,開發人員也有必定會有對遠古系統的挑戰,而 XML 格式的資料來源作為經典存在渾身上下散發著濃濃 old money 的味道。
因為有 Newtonsoft.Json 這樣優秀的 JSON 框架存在,開發人員可以很容易的對 JSON 格式的字串反序列化。但是 XML 格式的資料就沒有這麼方便了:雖然 .NET 中內建了對 XML 序列化和反序列化的支援,但遇到需要對接外部資料時就不是很方便了。
使用 XmlReader 讀取資料
從 XML 中提取目標資料最高效,也最麻煩的方式是直接使用 :
使用以下程式碼對上述 hireDate.xml 檔案讀取:
using (XmlReader reader = XmlReader.Create("hireDate.xml")) { // Move to the hire-date element.
reader.MoveToContent();
reader.ReadToDescendant("hire-date"); // Return the hire-date as a DateTime object.
DateTime hireDate = reader.ReadElementContentAsDateTime();
Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}
輸出:
Six Month Review Date: 7/8/2003 12:00:00 AM
使用 XDocument 讀取資料
在 .NET Framework 3.5 釋出後的時間裡,開發人員可以使用 XDocument 來生成和解析 XML 文件,這要比 XmlReader 方便的多:
string str =
@"<!-- comment at the root level -->Content ";
XDocument doc = XDocument.Parse(str);
Console.WriteLine(doc.XPathSelectElement("//Child"));
輸出:
Content
但硬編碼的 XPath 並不方便除錯,而且需要時刻關注空引用的問題。在 XML 格式複雜、專案工程比較大時使用起來也不方便。
一種把 XML 轉換為 XML 的技術: XSLT
在電腦科學中,可擴充套件樣式錶轉換語言(英語:Extensible Stylesheet Language Transformations,縮寫XSLT)是一種樣式轉換標記語言,可以將XML資料檔轉換為另外的XML或其它格式,如HTML網頁,純文字。XSLT最末的T字母表示英語中的“轉換”(transformation)。
簡單來說,開發人員可以藉助 XSLT 技術編寫一個 XML 檔案,並使用該檔案將一種 XML 格式轉換為另一種 XML 。即:在對接複雜格式 XML 資料來源時,開發人員可以編寫一個字尾為 .xsl 的檔案,並使用該檔案將資料來源格式轉換為自己需要的格式(比如可以適配 XML 反序列化的格式)。
從一個簡單的 XML 檔案開始:
Empire Burlesque
Bob Dylan USA Columbia 10.90 1985 .
.
.
如果直接在瀏覽器開啟這個檔案:
假設我們只關心所有的 title 資訊,可以使用下面的 cdcatalog.xsl 檔案,該檔案可以將 cdcatalog.xml 轉為 XmlSerializer 所需要的格式:
為了可以在瀏覽器中直接觀察到轉換效果,可以選擇把 XSL 樣式錶連結到 XML 文件:向 XML 文件(”cdcatalog.xml”)新增 XSL 樣式表引用即可。
Empire Burlesque
Bob Dylan USA Columbia 10.90 1985 .
.
. ?xml-stylesheet>
重新整理瀏覽器,開啟開發者工具:
從上面的操作可以看出,除錯 XLS 檔案的成本是很低的,開發者可以很容易對 XLS 檔案進行更改,並在短時間之內得到執行結果。
在 C# 中使用 XSLT 技術
在 C# 中,可以使用 進行 XSL 轉換。以下程式碼展示這個轉換過程:
XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load("cdcatalog.xsl"); var sb = new StringBuilder(); using (var sw = new StringWriter(sb))
{using (var xw = new XmlTextWriter(sw) { Formatting = Formatting.Indented })
{
xsl.Transform("cdcatalog.xml", xw);
}
} var xml = sb.ToString();
Console.WriteLine(xml);
以上程式碼會產生如下輸出:
實現了反序列化功能,這會產生以下輸出:
Empire Burlesque
Hide your heart
Greatest Hits
Still got the blues
Eros
...
總結與原始碼
本文所述的轉換和反序列化技術已經在真實的生產環境中得到驗證,千萬級的資料處理也毫不費力。
本文包含的演示的程式碼和資料可以在 Gitee 上找到: 。
作者:Soar、毅
出處:https://www.cnblogs.com/Soar1991/p/14806436.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2807160/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vue2.0原始碼學習(6) - 元件註冊Vue原始碼元件
- React 原始碼學習(八):元件更新React原始碼元件
- 手寫Vuex原始碼Vue原始碼
- 手寫 ArrayList 核心原始碼原始碼
- 手寫@koa/router原始碼原始碼
- 手寫ArrayList核心原始碼原始碼
- 手寫 Java HashMap 核心原始碼JavaHashMap原始碼
- 手寫Koa.js原始碼JS原始碼
- 手寫Express.js原始碼ExpressJS原始碼
- 手寫Redux-Saga原始碼Redux原始碼
- 《四 spring原始碼》手寫springmvc原始碼SpringMVC
- Vue2.0 + ElementUI 手寫許可權管理系統後臺模板(四)——元件結尾VueUI元件
- 手寫koa-static原始碼,深入理解靜態伺服器原理原始碼伺服器
- 《四 spring原始碼》手寫springioc框架Spring原始碼框架
- 求職之手寫程式碼-手寫原始碼大雜燴求職原始碼
- 【SpringCloud原理】Ribbon核心元件以及執行原理萬字原始碼剖析SpringGCCloud元件原始碼
- 手寫一個Promise,附原始碼分析Promise原始碼
- 如何寫一個拖拽日曆元件(附原始碼)元件原始碼
- element 手寫季度元件元件
- PandasTA 原始碼解析(八)AST原始碼
- 一個簡單案例的Vue2.0原始碼Vue原始碼
- Vue2.0原始碼學習(4) - 合併配置Vue原始碼
- Vue2.0原始碼閱讀筆記(四):nextTickVue原始碼筆記
- vue2.0子元件修改父元件資料Vue元件
- Spring原始碼系列:初探底層,手寫SpringSpring原始碼
- 手寫Struts,帶你深入原始碼中心解析原始碼
- 手寫Spring ioc 框架,狠狠的“Spring 原始碼Spring框架原始碼
- Vue2.0父子元件間通訊Vue元件
- Spring學習之——手寫Mini版Spring原始碼Spring原始碼
- 《四 spring原始碼》利用TransactionManager手寫spring的aopSpring原始碼
- 手機直播原始碼,android 輪播圖自定製元件原始碼Android元件
- 手寫(radio)element-ui元件UI元件
- Android 8.0 原始碼分析 (八) ActivityManagerServiceAndroid原始碼
- 【spring原始碼】八、getBean預覽Spring原始碼Bean
- 原始碼閱讀:SDWebImage(八)——SDWebImageGIFCoder原始碼Web
- 原始碼閱讀:AFNetworking(八)——AFAutoPurgingImageCache原始碼
- javaScript(js)手寫原生任務定時器原始碼JavaScriptJS定時器原始碼
- node進階——之事無鉅細手寫koa原始碼原始碼