程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第三講 使用C#開發基於XSLT的代碼生成器(2)(1)

C#發現之旅第三講 使用C#開發基於XSLT的代碼生成器(2)(1)

編輯:關於C語言

在本演示程序中,我們只是用程序目錄下的一個Access2000數據庫作為例子,因此也只調 用了LoadFromAccesss2000這個函數,其他的分析SQLSERVER和ORACLE的函數沒用到。在未來 當這個代碼生成器經過改善而投入實際應用時,它就能分析SQLSERVER和Oracle等企業級數據 庫了。

在主頁面xslcreatecode.ASPx中定義了一個GetXMLString函數,它能將一個對象 序列化成一個XML文檔。這裡的DataBaseInfo,TableInfo和FieldInfo都能XML序列化。在執 行XML序列化時,系統會分析對象類型,遍歷對象所有的公開字段和可讀寫屬性,然後將這些 屬性值輸出到XML文檔,若遇到對象樹狀結構,則會遞歸遍歷這個樹狀結構,對對象中的每一 個下屬對象都會建立一個XML子元素進行輸出。在這裡DataBaseInfo,TableInfo和FIEldInfo 構成了三層的樹狀結構,因此生成的XML文檔也是多層次的。

一般來說,序列化生成 的XML文檔中,XML元素的名稱等於對象類型的名稱和公開字段屬性的名稱,但可以通過添加 特性來改變這種默認行為,在類型TableInfo的定義前面加上了特性XmlType,在這裡指明了 為類型TableInfo生成的XML元素名稱不是對象類型名稱TableInfo,而是Table。

[System.Xml.Serialization.XMLType("Table")]
public class TableInfo

同樣的方式,我們為類型FIEldInfo指定了XML元素名稱為FIEld ,這裡展示了特性在C#中的應用。關於特性在未來的某節課程中將講到。

由於能執行 XML序列化的屬性必須是可讀寫的,因此在類型FIEldInfo中的IsString,IsInteger等屬性為 了能執行XML序列化,因此定義了毫無作用的set方法。

XSLT模板說明

程序目錄下 放置了一些以下劃線開頭的擴展名為XSLT的文件,這就是代碼生成器使用的代碼生成模板。 在主界面中使用不同的模板就能生成不同的代碼。在這裡我們以_cshaprhashtable.xslt為例 子進行說明。

_cshaprhashtable.xslt

首先我們在界面中選擇數據表Customers, 可以生成它的XML代碼為.

<Table xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name>Customers</Name>
  <FIElds>
    <FIEld>
     <Name>Address</Name>
     <Remark>地址</Remark>
     <FieldType>Char</FIEldType>
     <IsString>true</IsString>
     <IsInteger>false</IsInteger>
     <IsBoolean>false</IsBoolean>
     <IsNumberic>false</IsNumberic>
     <IsDateTime>false</IsDateTime>
     <IsBinary>false</IsBinary>
     <ValueTypeName>System.String</ValueTypeName>
     <FieldWidth>60</FIEldWidth>
     <Nullable>true</Nullable>
     <PrimaryKey>false</PrimaryKey>
     <Indexed>false</Indexed>
   </FIEld>
    <FIEld>
     <Name>City</Name>
     <Remark>城市</Remark>
     <FieldType>Char</FIEldType>
     <IsString>true</IsString>
     <IsInteger>false</IsInteger>
     <IsBoolean>false</IsBoolean>
     <IsNumberic>false</IsNumberic>
     <IsDateTime>false</IsDateTime>
     <IsBinary>false</IsBinary>
     <ValueTypeName>System.String</ValueTypeName>
     <FieldWidth>15</FIEldWidth>
     <Nullable>true</Nullable>
     <PrimaryKey>false</PrimaryKey>
     <Indexed>false</Indexed>
   </FIEld>
    <Field>其他字段....</FIEld>
  </FIElds>
< /Table>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved