精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

.NET框架中的XML基礎類:xsd.exe

開發 后端
本文介紹了.NET框架中的XML基礎類。一種從 XSD 生成代碼的方法是以統一的方式對架構對象模型 (SOM) 進行簡單的迭代,并直接根據該模型編寫代碼。這正是大量為克服 xsd.exe 工具局限而創建的代碼生成器所采取的方法。

.NET框架中的XML基礎類

一種從 XSD 生成代碼的方法是以統一的方式對架構對象模型 (SOM) 進行簡單的迭代,并直接根據該模型編寫代碼。這正是大量為克服 xsd.exe 工具局限而創建的代碼生成器所采取的方法。不過,這需要付出相當大的努力以及編寫大量的代碼,因為我們應考慮 XSD 到 CLR 類型映射、XSD 類型繼承、XML 序列化特性等問題。掌握 SOM 也不是一件輕而易舉的事情。如果無須由我們自己來完成所有工作,而只需添加或修改 xsd.exe 工具的內置代碼生成,難道不好嗎?

正像我前面所說的,但與普遍看法不同的是,xsd.exe 用于生成輸出的類就在 System.Xml.Serialization 命名空間中并被聲明為公共類,即使 xsd.exe 工具在某種程度上不允許進行任何類型的自定義。它們中的大多數確實未進行記載,但我將在這一部分中向您說明如何使用它們。請不要被 MSDN 幫助中的以下聲明嚇住:“[TheTopSecretClassName] 類型支持Microsoft? .NET 框架基礎結構,并且不適合直接從您的代碼中使用”。我將在不進行胡亂刪改以及不采用任何反射代碼的前提下使用它們。

一種比相當平常的 "StringBuilder.Append" 代碼生成好得多的方法是利用 System.CodeDom 命名空間中的類,而這正是內置代碼生成類(從現在開始簡稱為 codegen)所做的。通過 CodeDom 中包含的一些類,我們可以用一種與語言無關的方式,在所謂的 AST(抽象語法樹)中表示幾乎所有的編程構造。稍后,另一個類(代碼生成器)可以對其進行解釋并生成您期望的原始代碼,例如Microsoft? Visual C# 或Microsoft? Visual Basic?.NET 代碼。這就是 .NET 框架中大多數代碼生成過程的工作方式。

Codegen 方法不僅利用這一點,還通過映射過程來分離架構分析和實際的 CodeDom 生成。對于我們希望為其生成代碼的每個架構元素,都必須執行該映射。從根本上說,它將構建一個新的對象以表示分析的結果,例如它的結構(這將是要為其生成的類型名)、它的成員以及這些成員的 CLR 類型等。

為了使用這些類,我們將遵循一個基本的工作流程,如下所述:

加載架構(原則上加載一個)。

為每個頂級 XSD 元素派生一系列映射。

將這些映射導出到 System.CodeDom.CodeDomNamespace。

在此過程中涉及到四個類,它們都定義在 System.Xml.Serialization 命名空間中:

 

圖 1. 用于獲得 CodeDom 樹的類

可以按以下方式,使用這些類來獲得 CodeDom 樹:

  1. namespace XsdGenerator   
  2. {   
  3.   public sealed class Processor   
  4.   {   
  5.     public static CodeNamespace Process( string xsdFile,    
  6.        string targetNamespace )   
  7.     {   
  8.       // Load the XmlSchema and its collection.   
  9.       XmlSchema xsd;   
  10.       using ( FileStream fs = new FileStream( xsdFile, FileMode.Open ) )   
  11.       {   
  12.         xsd = XmlSchema.Read( fs, null );   
  13.         xsd.Compile( null );   
  14.       }   
  15.       XmlSchemas schemas = new XmlSchemas();   
  16.       schemas.Add( xsd );   
  17.       // Create the importer for these schemas.   
  18.       XmlSchemaImporter importer = new XmlSchemaImporter( schemas );   
  19.       // System.CodeDom namespace for the XmlCodeExporter to put classes in.   
  20.       CodeNamespace ns = new CodeNamespace( targetNamespace );   
  21.       XmlCodeExporter exporter = new XmlCodeExporter( ns );   
  22.       // Iterate schema top-level elements and export code for each.   
  23.       foreach ( XmlSchemaElement element in xsd.Elements.Values )   
  24.       {   
  25.         // Import the mapping first.   
  26.         XmlTypeMapping mapping = importer.ImportTypeMapping(    
  27.           element.QualifiedName );   
  28.         // Export the code finally.   
  29.         exporter.ExportTypeMapping( mapping );   
  30.       }   
  31.       return ns;   
  32.     }   
  33.   }   
  34. }   

這些代碼非常簡單,盡管您可能希望在其中添加異常管理代碼。需要注意的一件事情是 XmlSchemaImporter 通過使用類型的限定名來導入類型,然后將其放在相應的 XmlSchema 中。因此,必須將架構中的所有全局元素傳遞給它,然后使用 XmlSchema.Elements 集合進行迭代。該集合像 XmlSchemaElement.QualifiedName 一樣,也是在架構編譯之后被填充的所謂的 Post Schema Compilation Infoset(即 PSCI,請參閱 MSDN 幫助)的成員。它具有在解析引用、架構類型、繼承、包含等之后填充和組織架構信息的作用。其功能類似于 DOM Post Validation Infoset(即 PSVI,請參閱 Dare Obasanjo 的 MSDN 文章和 XSD 規范)。

您可能已經注意到 XmlSchemaImporter 工作方式的一個副作用(實際上是一個缺陷):您只能檢索(導入)全局定義的元素的映射。在架構中的任何位置局部定義的任何其他元素將無法通過該機制訪問。這具有我將在后面討論的一些后果,它們可能會限制您可以應用的自定義,或者影響我們的架構設計。

XmlCodeExporter 類根據所導入的映射,用類型定義來填充傳遞給其構造函數的 CodeDomNamespace,從而生成所謂的 CodeDom 樹。通過上述方法得到的 CodeDom 就是 xsd.exe 工具在內部生成的東西。有了該樹以后,就可以直接將其編譯為程序集,或者生成源代碼。

如果我希望擺脫 xsd.exe 工具,可以輕松地生成使用該類的控制臺應用程序。為達到該目的,我需要根據收到的 CodeDom 樹生成一個源代碼文件。我通過創建一個適用于用戶所選的目標語言的 CodeDomProvider 來做到這一點:

  1. static void Main( string[] args )  
  2. {  
  3.   if ( args.Length != 4 )  
  4.   {  
  5.     Console.WriteLine(  
  6.       "Usage: XsdGenerator xsdfile namespace outputfile [cs|vb]" );  
  7.     return;  
  8.   }  
  9.   // Get the namespace for the schema.  
  10.   CodeNamespace ns = Processor.Process( args[0], args[1] );  
  11.   // Create the appropriate generator for the language.  
  12.   CodeDomProvider provider;  
  13.   if ( args[3] == "cs" )  
  14.     provider = new Microsoft.CSharp.CSharpCodeProvider();  
  15.   else if ( args[3] == "vb" )  
  16.     provider = new Microsoft.VisualBasic.VBCodeProvider();  
  17.   else 
  18.     throw new ArgumentException( "Invalid language", args[3] );  
  19.   // Write the code to the output file.  
  20.   using ( StreamWriter sw = new StreamWriter( args[2], false ) )  
  21.   {  
  22.     provider.CreateGenerator().GenerateCodeFromNamespace(  
  23.       ns, sw, new CodeGeneratorOptions() );  
  24.   }  
  25.   Console.WriteLine( "Finished" );  
  26.   Console.Read();  
  27. }  

我可以使用生成器所收到的 CodeGeneratorOptions 實例的屬性,進一步自定義生成的代碼格式和其他選項。

在編譯該控制臺應用程序后,我可以生成與 xsd.exe 工具所生成的完全相同的代碼。有了這一功能,使我完全不必再依賴該工具,并且我不再需要知道該工具是否已安裝或者位于何處,也不再需要為它啟動新的進程,等等。然而,每當我修改架構以后,都需要一遍遍地從命令行運行它,這是很不理想的。Microsoft?Visual Studio?.NET 使開發人員可以通過所謂的自定義工具來利用設計時代碼生成。其中一個例子是類型化數據集,當您使用它時(盡管不必具體指定),都會有一個自定義工具在您每次保存數據集 XSD 文件時對其進行處理,并自動生成相應的“代碼隱藏”類。

有關構建自定義工具的內容超出了本文的范圍,但您可以閱讀更多有關將我迄今為止所編寫的代碼轉換為 該網絡日記張貼中的自定義工具的內容。該工具的代碼包含在本文的下載內容中,您可以通過將“XsdCodeGen”自定義工具名稱指定給 XSD 文件屬性來簡單地使用它。注冊方法在隨附的自述文件中進行了說明。

即使我能夠找到更容易使用的自定義工具,但是將 xsd.exe 工具替換為另一個執行完全相同任務的工具并沒有太大意義,不是嗎?畢竟,我們完成這些工作的原因就是為了改變這種做法!因此,讓我們從這一底線開始對其進行自定義。

【編輯推薦】

  1. ASP.NET 2.0頁面狀態持續:ViewState與控件
  2. ASP.NET 2.0數據綁定控件的自定義集合
  3. 列表控件示例:HeadlineList
  4. ASP.NET 2.0數據綁定機制:生成控件
  5. ASP.NET 2.0數據綁定的發展簡述
責任編輯:yangsai 來源: MSDN
相關推薦

2009-11-13 14:52:24

ADO.NET XML

2009-08-05 18:49:11

XmlSerializ

2009-09-02 18:28:55

.NET框架ESBasic

2009-08-21 16:55:10

.NET框架與XML

2010-01-12 16:20:44

VB.NET類

2009-05-21 13:25:50

.NETCountDownLa微軟

2011-05-18 15:40:32

XML

2009-08-05 16:32:25

Smooks 1.2框

2009-10-28 10:15:48

VB.NET框架類庫

2009-08-04 17:42:23

DataSourceCASP.NET

2009-07-28 14:40:15

XML數據ASP.NET

2023-06-26 07:26:50

System.Net網絡通信基礎接口

2009-12-18 16:39:59

ADO.NET基礎類

2024-06-18 13:17:02

數據庫框架

2009-09-14 16:46:15

LINQ to XML

2010-09-15 09:18:21

ASP.NET MVC

2009-08-10 09:19:47

.NET反應性框架

2011-04-26 15:26:38

PostgreSQL

2011-04-26 14:21:50

MySQL

2009-07-27 14:46:16

XML和ASP.NET
點贊
收藏

51CTO技術棧公眾號

精品一区二区影视| 欧美aaaa视频| 欧美色图天堂网| 亚洲一二区在线| 精品人妻一区二区三区蜜桃| 一区二区毛片| 久久精品国产亚洲精品2020| 香蕉视频污视频| 成人精品高清在线视频| 亚洲资源中文字幕| 日韩欧美亚洲v片| 午夜精品久久久久久久91蜜桃| 亚洲综合二区| 欧美丰满片xxx777| 51妺嘿嘿午夜福利| 一区二区三区亚洲变态调教大结局| 欧美午夜宅男影院在线观看| 中文字幕日韩一区二区三区| 天堂网av2014| 国产揄拍国内精品对白| 日韩美女视频免费看| 青青操视频在线播放| 日韩毛片视频| 日韩精品福利在线| 最新日本中文字幕| 99精品国产九九国产精品| 第一福利永久视频精品| 日本中文字幕在线视频观看 | 久久99国产精品久久99| 69av在线视频| 国产亚洲精品码| 香蕉综合视频| 色天天综合狠狠色| 国产精品久久久久久久av| 欧美三级电影在线| 精品久久国产字幕高潮| 亚洲欧美一区二区三区不卡| 懂色aⅴ精品一区二区三区| 欧美性猛交xxxx偷拍洗澡| 一卡二卡三卡视频| 成人福利网站| 亚洲欧美一区二区视频| 中文字幕在线亚洲三区| 99中文字幕一区| 久久精品欧美日韩精品| 久久久精品动漫| 理论片中文字幕| 国产乱人伦偷精品视频免下载| 国产精品视频男人的天堂| 波多野结衣绝顶大高潮| 久久久久久久高潮| 日韩av色在线| 97人妻精品视频一区| 日韩精品成人一区二区三区| 日本精品性网站在线观看| 在线免费黄色av| 日日夜夜免费精品视频| 日本久久久久久| 日韩免费av网站| 免费高清在线一区| 成人午夜小视频| 国产福利小视频| 国产91丝袜在线18| 好吊色欧美一区二区三区视频| 色欲久久久天天天综合网 | 国产欧美韩日| 午夜福利理论片在线观看| 91丨九色丨蝌蚪富婆spa| 老司机精品福利在线观看| 男女网站在线观看| 国产欧美日本一区二区三区| 亚洲ai欧洲av| a视频在线免费看| 亚洲国产aⅴ成人精品无吗| av高清在线免费观看| xxxxxx欧美| 欧美日韩一级大片网址| 极品人妻一区二区| 精品国产乱子伦一区二区| 亚洲精品视频在线播放| 日本女人性生活视频| 国产精品mm| 国产99久久精品一区二区永久免费| 亚洲怡红院av| 成人国产精品免费观看| 欧美日韩喷水| 91国内在线| 欧美日韩国产中文精品字幕自在自线| 丰满少妇在线观看| 视频亚洲一区二区| 亚洲欧美日韩久久久久久| 2017亚洲天堂| 亚洲巨乳在线| 国产日韩在线播放| 免费a视频在线观看| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲天天综合网| 高清成人在线观看| 无码免费一区二区三区免费播放| av电影免费在线观看| 日韩欧美在线免费| 制服.丝袜.亚洲.中文.综合懂| 久久综合亚洲| 欧美极品少妇xxxxⅹ喷水 | 亚洲私拍视频| 欧美一区二区在线看| 少妇真人直播免费视频| 狠狠爱综合网| 91精品在线观| 黄色片在线看| 天天综合天天做天天综合| 奇米视频888| 九九久久成人| 久久久久久久久久久免费精品| 伊人久久成人网| 久久久亚洲精品一区二区三区 | 美日韩精品视频| 亚洲一区中文字幕在线观看| 国产福利第一视频在线播放| 亚洲成人免费视| 黄色一级片免费播放| 欧美一二区在线观看| 91精品国产成人| 性欧美videos另类hd| 国产精品电影院| 激情综合网俺也去| 欧美一区二区三区红桃小说| 色综合久久88色综合天天看泰| 成人黄色免费网| 久久久午夜电影| 欧美日韩成人免费视频| 97久久综合精品久久久综合| 欧美成人免费在线观看| 国产一区二区三区三州| 国产精品天干天干在观线 | 国产一区在线观看麻豆| 亚洲午夜精品久久| 久久国产三级| 最近2019中文字幕大全第二页| 在线视频一区二区三区四区| 91丨porny丨户外露出| 免费av手机在线观看| 成人av地址| 午夜精品福利视频| 午夜美女福利视频| 亚洲国产日韩在线一区模特| av免费观看不卡| 亚洲成人在线| 激情欧美一区二区三区中文字幕| 懂色av一区| 亚洲精品一区二区三区蜜桃下载 | 日本成人在线一区| 亚洲欧美日本国产有色 | 国产精品夜夜夜一区二区三区尤| 污污的网站在线看| 精品国产免费视频| 中文字幕超碰在线| 国产色产综合色产在线视频| 日韩视频在线免费看| 国内精品久久久久久久久电影网| 国产精品999| 无遮挡的视频在线观看 | 91av免费观看| 国产精品成人一区二区网站软件| 成人在线免费网站| 无码小电影在线观看网站免费| 国产丝袜视频一区| 在线观看一二三区| 亚洲精品欧美综合四区| 国产黑丝在线观看| 日韩黄色片在线观看| 一区国产精品| 综合伊人久久| 国产成人亚洲综合| 黄网址在线观看| 亚洲第一精品电影| 久久精品久久久久久久| 亚洲欧洲成人自拍| 精品国产av色一区二区深夜久久 | 91pony九色| 黄色亚洲精品| 日本一区网站| 综合激情久久| 国产精品网红福利| 免费不卡av| 色婷婷综合成人| 色窝窝无码一区二区三区| 欧美性高清videossexo| 久久久久黄色片| 久久久99久久| 三级黄色片播放| 久久国产精品99国产| 欧美三级午夜理伦三级老人| 亚洲传媒在线| 超碰97人人在线| www.26天天久久天堂| 久久久久久九九九| 午夜视频在线观看网站| 亚洲成色777777女色窝| 亚洲天堂2021av| 精品久久久久久久久久| √天堂中文官网8在线| 91丨porny丨中文| 4438x全国最大成人| 秋霞av亚洲一区二区三| 六月婷婷在线视频| 欧美电影免费| 天堂√在线观看一区二区| 中文字幕日韩在线| 91久久久久久久| 国产精品亚洲一区二区三区在线观看 | 久久九九视频| 视频欧美一区| 91久久久精品| 亚洲人体在线| 国产精品aaaa| 自拍偷拍欧美视频| 亚洲91精品在线观看| 18+视频在线观看| 综合欧美国产视频二区| 国产综合在线观看| 亚洲精品美女久久久| 亚洲国产成人一区二区| 欧美精品在欧美一区二区少妇| 亚洲视频 欧美视频| 午夜精品一区二区三区三上悠亚| 黄色片在线观看网站| 中文字幕一区二区三区四区不卡| 国产真实乱人偷精品人妻| 2024国产精品| 亚洲av成人片色在线观看高潮| 国产成人免费视频精品含羞草妖精 | 亚洲国产精品成人va在线观看| 午夜精品久久久久久久99老熟妇| 7777精品伊人久久久大香线蕉的 | 老司机免费视频一区二区| 动漫av免费观看| 日韩影院免费视频| 国产av人人夜夜澡人人爽| 米奇777在线欧美播放| 人妻熟女一二三区夜夜爱| 亚洲欧美日本日韩| 日本一区二区在线免费播放| 亚洲一区二区精品在线观看| 97在线播放免费观看| 欧美日韩亚洲国产一区| 久久免费在线观看视频| 一区二区国产盗摄色噜噜| 欧美黑吊大战白妞| 亚洲福利一二三区| 日本中文字幕网| 精品久久久国产精品999| 国产性猛交╳xxx乱大交| 日本乱人伦aⅴ精品| 小泽玛利亚一区二区三区视频| 欧美午夜电影一区| 一级黄色短视频| 欧美一级精品在线| 人妻精品一区二区三区| 亚洲精品久久久久中文字幕二区 | 精品国偷自产国产一区| 日本精品一二区| 亚洲三级免费看| 91在线观看| 欧美xxxx做受欧美.88| 高h视频在线播放| 97人人爽人人喊人人模波多 | 国产成人av一区二区三区不卡| 久久丝袜美腿综合| 亚洲天堂av中文字幕| 亚洲摸摸操操av| 在线能看的av| 欧美视频一区二区三区| 国产高潮流白浆喷水视频| 日韩精品欧美激情| 思思99re6国产在线播放| 欧美人成在线视频| 9i看片成人免费高清| 国产在线不卡精品| 成人涩涩网站| 色女人综合av| 欧美特黄一区| www.日日操| 国产精品 日产精品 欧美精品| 黄色片视频免费观看| 国产精品私房写真福利视频| 青娱乐在线视频免费观看| 色猫猫国产区一区二在线视频| 国产精品探花视频| 亚洲毛片一区二区| 4438x成人网全国最大| 欧美亚洲国产视频| 高清精品久久| 日本免费一区二区三区| 欧美精品综合| 狠狠躁狠狠躁视频专区| 成人黄色小视频在线观看| 在线观看亚洲大片短视频| 亚洲v精品v日韩v欧美v专区| 在线观看毛片视频| 日韩精品在线视频| 久久电影网站| 国产精品自产拍在线观看| 老司机成人在线| 红桃一区二区三区| 青青草国产成人av片免费| 91九色蝌蚪porny| 中文字幕一区二| 国产乱码77777777| 亚洲第一中文字幕| 高h视频在线观看| 国产精品久久久久久av下载红粉| baoyu135国产精品免费| 夜夜爽99久久国产综合精品女不卡| 亚洲视频www| 久久久久亚洲av无码麻豆| 欧美国产一区视频在线观看| 日韩欧美视频在线免费观看| 日韩一级精品视频在线观看| 成年人在线看| 国产97免费视| 亚洲v天堂v手机在线| 日韩欧美不卡在线| 国产精一品亚洲二区在线视频| 精品人妻一区二区三区四区| 欧美日韩亚洲高清| 五月天激情开心网| 亚洲**2019国产| 大香伊人久久精品一区二区 | av免费网站在线观看| 国产精品欧美亚洲777777| 久久av免费看| 欧美视频第一区| 91丨九色丨蝌蚪丨老版| 国产午夜激情视频| 精品久久久久久综合日本欧美 | 四季av一区二区凹凸精品| 国产超碰在线播放| 亚洲国产精品成人综合| 天堂网一区二区| 一本大道久久加勒比香蕉| 三上悠亚一区二区| 日韩欧美亚洲在线| 日韩高清中文字幕一区| 亚洲色成人网站www永久四虎| 日本韩国一区二区| 国产二区在线播放| 国产精品视频自在线| 日本一区二区三区视频| 爱情岛论坛亚洲首页入口章节| 中文字幕高清不卡| 在线视频 91| 久热精品视频在线免费观看| 激情不卡一区二区三区视频在线| 男同互操gay射视频在线看| 国产精品中文有码| 久久精品女人毛片国产| 亚洲精品国产精品乱码不99按摩| 欧美日韩国产观看视频| 欧美精品一区二区三区在线四季 | 国内揄拍国内精品久久| 国产精品手机在线观看| 一道本成人在线| 91社区在线| 99爱精品视频| 99亚洲精品| 夜夜春很很躁夜夜躁| 欧美伦理视频网站| 天堂av在线电影| 蜜桃传媒视频第一区入口在线看| 日韩国产高清影视| 国产suv一区二区三区| 亚洲福利在线看| 视频一区在线免费看| 黄黄视频在线观看| av一本久道久久综合久久鬼色| 亚洲高清视频免费观看| 久久久久北条麻妃免费看| 国产乱人伦精品一区| 国产精品入口免费软件| 亚洲日穴在线视频| 桃花色综合影院| 成人国产精品免费视频| 亚洲黄色影片| 羞羞在线观看视频| 欧美大黄免费观看| av在线不卡精品| 欧妇女乱妇女乱视频| 久久亚洲影视婷婷| 国产91视频在线| 日韩**中文字幕毛片| 午夜精品国产| 人妻体内射精一区二区| 欧美一级片在线观看| 欧美黑人一区| 国产精品一二三在线观看| 91麻豆精品一区二区三区| 国产精品色综合| 日韩av黄色在线观看| 欧美在线黄色|