基于Visual Studio2010讲解LINQ读出数据库数据生成XML
LINQ to XML 是一種啟用了 LINQ 的內(nèi)存 XML 編程接口,使用它,可以在 .NET Framework 編程語(yǔ)言中處理 XML。?
LINQ to XML 最重要的優(yōu)勢(shì)是它與 Language-Integrated Query (LINQ) 的集成。 由于實(shí)現(xiàn)了這一集成,因此,可以對(duì)內(nèi)存 XML 文檔編寫(xiě)查詢,以檢索元素和屬性的集合。 LINQ to XML 的查詢功能在功能上(盡管不是在語(yǔ)法上)與 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 后,可提供更強(qiáng)的類型化功能、編譯時(shí)檢查和改進(jìn)的調(diào)試器支持。?
通過(guò)將查詢結(jié)果用作 XElement 和 XAttribute 對(duì)象構(gòu)造函數(shù)的參數(shù),實(shí)現(xiàn)了一種功能強(qiáng)大的創(chuàng)建 XML 樹(shù)的方法。 這種方法稱為“函數(shù)構(gòu)造”,利用這種方法,開(kāi)發(fā)人員可以方便地將 XML 樹(shù)從一種形狀轉(zhuǎn)換為另一種形狀。
LINQ to XML 提供了改進(jìn)的 XML 編程接口,這一點(diǎn)可能與 LINQ to XML 的 LINQ 功能同樣重要。 通過(guò) LINQ to XML,對(duì) XML 編程時(shí),您可以實(shí)現(xiàn)任何預(yù)期的操作,包括:
從文件或流加載 XML。
將 XML 序列化為文件或流。
使用函數(shù)構(gòu)造從頭開(kāi)始創(chuàng)建 XML。
使用類似 XPath 的軸查詢 XML。
使用 Add、Remove、ReplaceWith 和 SetValue 等方法對(duì)內(nèi)存 XML 樹(shù)進(jìn)行操作。
使用 XSD 驗(yàn)證 XML 樹(shù)。
使用這些功能的組合,可將 XML 樹(shù)從一種形狀轉(zhuǎn)換為另一種形狀。
創(chuàng)建 XML 樹(shù)是否方便,這一點(diǎn)非常重要。 例如,若要?jiǎng)?chuàng)建一個(gè)小型 XML 樹(shù),可以編寫(xiě)以下 C# 代碼:
XElement contacts = new XElement("Contacts", new XElement("Contact", new XElement("Name", "Patrick Hines"), new XElement("Phone", "206-555-0144", new XAttribute("Type", "Home")), new XElement("phone", "425-555-0145", new XAttribute("Type", "Work")), new XElement("Address", new XElement("Street1", "123 Main St"), new XElement("City", "Mercer Island"), new XElement("State", "WA"), new XElement("Postal", "68042") ) ) );?
請(qǐng)注意,縮進(jìn)用于構(gòu)造 XML 樹(shù)的代碼可顯示基礎(chǔ) XML 的結(jié)構(gòu)。?
直接使用 XML 元素
在使用 XML 編程時(shí),主要關(guān)注的通常是 XML 元素,也可能關(guān)注屬性。 在 LINQ to XML 中,可以直接使用 XML 元素和屬性。 例如,可以執(zhí)行以下操作:
創(chuàng)建 XML 元素而根本不使用文檔對(duì)象。 當(dāng)必須使用 XML 樹(shù)的片段時(shí),這可簡(jiǎn)化編程。
直接從 XML 文件加載 T:System.Xml.Linq.XElement 對(duì)象。
將 T:System.Xml.Linq.XElement 對(duì)象序列化為文件或流。
使用 LINQ to XML 時(shí),僅在文檔的根級(jí)別添加注釋或處理說(shuō)明時(shí),才需使用 XDocument??
名稱和命名空間的簡(jiǎn)化處理
處理名稱、命名空間和命名空間前綴通常是 XML 編程的復(fù)雜部分。LINQ to XML 完全不需要處理命名空間前綴,從而簡(jiǎn)化了名稱和命名空間。 可以輕松控制命名空間前綴。 但如果您決定不顯式控制命名空間前綴,則在序列化時(shí),LINQ to XML 將會(huì)分配命名空間前綴(如果需要)或使用默認(rèn)命名空間進(jìn)行序列化。 如果使用默認(rèn)命名空間,則生成的文檔中將沒(méi)有命名空間前綴。?
下面我們來(lái)看LINQ讀出數(shù)據(jù)庫(kù)數(shù)據(jù)生成XML實(shí)戰(zhàn)例程:
本實(shí)例是一個(gè)從數(shù)據(jù)庫(kù)里讀出來(lái)省份,城市,地區(qū)的數(shù)據(jù)生成3個(gè)XML文件.
首先創(chuàng)建一個(gè)Linq to SQL的類, 然后將省份,城市,地區(qū)的表拖入類中:
然后新建一個(gè)類,加入代碼如下:
public void ResetProvinces(string path) { XElement xmlProvinces = new XElement("Provinces"); foreach (S_Province province in DB.S_Provinces) { xmlProvinces.Add( new XElement("Province", province.ProvinceName.ToString(), new XAttribute("ID", province.ProvinceID.ToString()), new XAttribute("ProvinceName", province.ProvinceName.ToString()) ) ); } xmlProvinces.Save(@path); } public void ResetCities(string path) { XElement xmlCities = new XElement("Cities"); foreach (S_City city in DB.S_Cities) { xmlCities.Add( new XElement("City", city.CityName.ToString(), new XAttribute("ID", city.CityID.ToString()), new XAttribute("CityName", city.CityName.ToString()), new XAttribute("PID", city.ProvinceID.ToString()), new XAttribute("ZipCode", city.ZipCode.ToString()) ) ); } xmlCities.Save(@path); } public void ResetDistract(string path) { XElement xmlDistricts =new XElement("Districts"); foreach (S_District district in DB.S_Districts) { xmlDistricts.Add( new XElement("District", district.DistrictName.ToString(), new XAttribute("ID", district.DistrictID.ToString()), new XAttribute("DistrictName", district.DistrictName.ToString()), new XAttribute("CID", district.CityID.ToString()) ) ); } xmlDistricts.Save(@path); }
最后執(zhí)行過(guò)代碼后可以看到XML效果:
(以城市為例)
<?xml version="1.0" encoding="utf-8"?> <Cities> <City ID="1" PID="1" ZipCode="100000">北京市</City> <City ID="2" PID="2" ZipCode="100000">天津市</City> <City ID="3" PID="3" ZipCode="050000">石家莊市</City> <City ID="4" PID="3" ZipCode="063000">唐山市</City> <City ID="5" PID="3" ZipCode="066000">秦皇島市</City> <City ID="6" PID="3" ZipCode="056000">邯鄲市</City> <City ID="7" PID="3" ZipCode="054000">邢臺(tái)市</City> <City ID="8" PID="3" ZipCode="071000">保定市</City> <City ID="9" PID="3" ZipCode="075000">張家口市</City> <City ID="10" PID="3" ZipCode="067000">承德市</City> <City ID="11" PID="3" ZipCode="061000">滄州市</City> <City ID="12" PID="3" ZipCode="065000">廊坊市</City> <City ID="13" PID="3" ZipCode="053000">衡水市</City> <City ID="14" PID="4" ZipCode="030000">太原市</City> <City ID="15" PID="4" ZipCode="037000">大同市</City> <City ID="16" PID="4" ZipCode="045000">陽(yáng)泉市</City> <City ID="17" PID="4" ZipCode="046000">長(zhǎng)治市</City> <City ID="18" PID="4" ZipCode="048000">晉城市</City> <City ID="19" PID="4" ZipCode="036000">朔州市</City> <City ID="20" PID="4" ZipCode="030600">晉中市</City> <City ID="21" PID="4" ZipCode="044000">運(yùn)城市</City> <City ID="22" PID="4" ZipCode="034000">忻州市</City> <City ID="23" PID="4" ZipCode="041000">臨汾市</City> <City ID="24" PID="4" ZipCode="030500">呂梁市</City> <City ID="25" PID="5" ZipCode="010000">呼和浩特市</City> <City ID="26" PID="5" ZipCode="014000">包頭市</City> <City ID="27" PID="5" ZipCode="016000">烏海市</City> </Cities>
轉(zhuǎn)載于:https://www.cnblogs.com/yincheng01/archive/2010/05/20/2213239.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的基于Visual Studio2010讲解LINQ读出数据库数据生成XML的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IDEA如何导出war包
- 下一篇: 转载:div和flash层级关系问题