基于Visual Studio2010讲解LINQ读出数据库数据生成XML
LINQ to XML 是一種啟用了 LINQ 的內存 XML 編程接口,使用它,可以在 .NET Framework 編程語言中處理 XML。?
LINQ to XML 最重要的優(yōu)勢是它與 Language-Integrated Query (LINQ) 的集成。 由于實現了這一集成,因此,可以對內存 XML 文檔編寫查詢,以檢索元素和屬性的集合。 LINQ to XML 的查詢功能在功能上(盡管不是在語法上)與 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 后,可提供更強的類型化功能、編譯時檢查和改進的調試器支持。?
通過將查詢結果用作 XElement 和 XAttribute 對象構造函數的參數,實現了一種功能強大的創(chuàng)建 XML 樹的方法。 這種方法稱為“函數構造”,利用這種方法,開發(fā)人員可以方便地將 XML 樹從一種形狀轉換為另一種形狀。
LINQ to XML 提供了改進的 XML 編程接口,這一點可能與 LINQ to XML 的 LINQ 功能同樣重要。 通過 LINQ to XML,對 XML 編程時,您可以實現任何預期的操作,包括:
從文件或流加載 XML。
將 XML 序列化為文件或流。
使用函數構造從頭開始創(chuàng)建 XML。
使用類似 XPath 的軸查詢 XML。
使用 Add、Remove、ReplaceWith 和 SetValue 等方法對內存 XML 樹進行操作。
使用 XSD 驗證 XML 樹。
使用這些功能的組合,可將 XML 樹從一種形狀轉換為另一種形狀。
創(chuàng)建 XML 樹是否方便,這一點非常重要。 例如,若要創(chuàng)建一個小型 XML 樹,可以編寫以下 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") ) ) );?
請注意,縮進用于構造 XML 樹的代碼可顯示基礎 XML 的結構。?
直接使用 XML 元素
在使用 XML 編程時,主要關注的通常是 XML 元素,也可能關注屬性。 在 LINQ to XML 中,可以直接使用 XML 元素和屬性。 例如,可以執(zhí)行以下操作:
創(chuàng)建 XML 元素而根本不使用文檔對象。 當必須使用 XML 樹的片段時,這可簡化編程。
直接從 XML 文件加載 T:System.Xml.Linq.XElement 對象。
將 T:System.Xml.Linq.XElement 對象序列化為文件或流。
使用 LINQ to XML 時,僅在文檔的根級別添加注釋或處理說明時,才需使用 XDocument??
名稱和命名空間的簡化處理
處理名稱、命名空間和命名空間前綴通常是 XML 編程的復雜部分。LINQ to XML 完全不需要處理命名空間前綴,從而簡化了名稱和命名空間。 可以輕松控制命名空間前綴。 但如果您決定不顯式控制命名空間前綴,則在序列化時,LINQ to XML 將會分配命名空間前綴(如果需要)或使用默認命名空間進行序列化。 如果使用默認命名空間,則生成的文檔中將沒有命名空間前綴。?
下面我們來看LINQ讀出數據庫數據生成XML實戰(zhàn)例程:
本實例是一個從數據庫里讀出來省份,城市,地區(qū)的數據生成3個XML文件.
首先創(chuàng)建一個Linq to SQL的類, 然后將省份,城市,地區(qū)的表拖入類中:
然后新建一個類,加入代碼如下:
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í)行過代碼后可以看到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">邢臺市</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">陽泉市</City> <City ID="17" PID="4" ZipCode="046000">長治市</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">運城市</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>
轉載于:https://www.cnblogs.com/yincheng01/archive/2010/05/20/2213239.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的基于Visual Studio2010讲解LINQ读出数据库数据生成XML的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA如何导出war包
- 下一篇: 转载:div和flash层级关系问题