在生成代碼按鈕事件處理中,首先根據數據表名列表獲得當前數據 表結構信息對象,並生成XML字符串。若用戶指定了某個數據表則調用GetXMLString函數來生 成該數據表的XML字符串,否則對整個數據結構信息對象生成XML字符串。
若用戶沒有 指定XSLT模板,則生成直接顯示XML代碼的Html代碼。這裡使用textarea元素來顯示XML代碼 ,這樣XML代碼顯示時不需要進行轉義處理。
若用戶指定了XSLT模板名稱,則創建一 個XslTransform對象,使用Load方法從程序目錄中加載該名稱的XSLT模板文件。這裡可以看 出我們的程序需要訪問程序目錄的權限,因此部署這個代碼生成器時是需要配置權限的,使 得程序能訪問程序所在目錄。
程序還創建一個XmlDocument對象,調用它的LoadXml方 法來加載剛剛生成的XML字符串,然後執行XSLT轉換,轉換結果就當作Html代碼准備顯示了。
最後程序根據生成的Html代碼設置到一個標簽控件中。
代碼中還定義了一個 GetXMLString函數,該函數能將一個對象序列化成一個帶縮進的XML字符串。其內部使用了 XmlSerializer對象。使用XmlSerializer對象能很方便的將對象的公開屬性導出為XML文檔。
/// <summary>
/// 將指定對象序列化成XML文檔,然後返回獲得 的XML字符串
/// </summary>
/// <param name="obj"> 對象</param>
/// <returns>XML字符串</returns>
private string GetXMLString( object obj )
{
System.IO.StringWriter myStr = new System.IO.StringWriter();
System.Xml.XmlTextWriter writer = new System.Xml.XMLTextWriter( myStr );
writer.Indentation = 3 ;
writer.IndentChar = ' ';
writer.Formatting = System.XML.Formatting.Indented ;
System.Xml.Serialization.XMLSerializer sc =
new System.Xml.Serialization.XMLSerializer( obj.GetType() );
sc.Serialize( writer , obj );
writer.Close();
string XML = myStr.ToString();
int index = XML.IndexOf("?>");
if( index > 0 )
xml = XML.Substring( index + 2 );
return XML.Trim() ;
}