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

C#發現之旅第一講 C#-XML開發(6)

編輯:關於C語言

然後我們使用一個名稱為 xsl的頁面參數來輸出XML文檔的XML-stylesheet信息頭,關於XSL下節課將詳細介紹,在本節 課不管這個參數。

我們調用WriteStartElement 方法來輸出XML文檔的根節點,這裡 參數為字符串 “Table” , 則表示輸出的XML文檔的根節點名稱為Table。

然後我們使用數據庫數據讀取器的Read函數來遍歷所有的查詢的數據,對於每一條記 錄,使用XML書寫器的WriteStartElement方法來輸出XML元素,這裡參數為字符串 ”Record”,表示輸出的XML元素名為Record,而且這個節點添加到XML文檔的根節 點下。

對於每一條記錄我們還遍歷其所有的字段值,對每一個字段值使用 WriteStartElement新增一個XML元素,元素名稱就是各個字段的名稱。若字段值是空則使用 WriteAttributeString輸出名為Null 的XML屬性,否則使用WriteString來輸出字段值的字符 串表達值。

由於WriteStartElement和WriteEndElement配對使用,因此每輸出完一個 XML元素後需要調用WriteEndElement來結束輸出XML元素。當所有的內容輸出完畢後我們調用 WriteEndDocument來結束輸出整個XML文檔的。

使用XmlDocument輸出XML文檔

頁面record.aspx功能和recordXML.ASPx類似。但它使用 XmlDocument來構造XML文檔 對象結構,然後輸出XML文檔。現對其過程進行說明。

打開record.ASPx的Html代碼, 可以看到代碼非常簡單,只有一行,所有的頁面輸出都在程序代碼中實現。打開它的C#代碼 ,可以看到在Page_Load 方法中添加了代碼執行頁面輸出,其代碼為

// 此處 代碼動態構造 XmlDocument對象 來輸出XML文檔
System.Xml.XmlDocument XmlDoc = new System.Xml.XMLDocument();
XmlDoc.AppendChild( XMLDoc.CreateElement ("Table"));
// 連接數據庫
using( System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection ())
{
  conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    + this.Server.MapPath("demomdb.mdb");
  conn.Open();
  // 查詢數據庫
  using( System.Data.OleDb.OleDbCommand cmd = conn.CreateCommand())
  {
    cmd.CommandText = "Select * From Customers";
    System.Data.OleDb.OleDbDataReader reader = cmd.ExecuteReader();
    // 獲得所有字段名
    int FieldCount = reader.FIEldCount ;
    string[] FieldNames = new string[ FIEldCount ] ;
    for( int iCount = 0 ; iCount < FIEldCount ; iCount ++ )
     {
      FIEldNames[ iCount ] = reader.GetName( iCount );
     }
    while( reader.Read())
    {
      // 輸 出一條記錄
      System.Xml.XmlElement RecordElement = XMLDoc.CreateElement("Record");
       XMLDoc.DocumentElement.AppendChild( RecordElement );
      for( int iCount = 0 ; iCount < FIEldCount ; iCount ++ )
      {
         // 輸出一個字段值
        System.Xml.XmlElement FIEldElement = XMLDoc.CreateElement( FIEldNames[ iCount ] );
         RecordElement.AppendChild( FIEldElement );
        object v = reader.GetValue( iCount );
        if( v == null || DBNull.Value.Equals( v ))
        {
           FIEldElement.SetAttribute("Null" , "1" );
         }
        else
        {
           FIEldElement.AppendChild( XMLDoc.CreateTextNode( Convert.ToString( v )));
         }
      }
    }//while( reader.Read())
     reader.Close();
  }//using( System.Data.OleDb.OleDbCommand cmd = conn.CreateCommand())
}//using( System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection())
string strXSLRef = this.Request.QueryString["xsl"] ;
if( strXSLRef != null && strXSLRef.Length > 0 )
{
  // 根據頁面參數指定的XSLT樣式表名稱執行 XSLT轉換
  strXSLRef = this.Server.MapPath( strXSLRef );
   System.Xml.Xsl.XslTransform transform = new System.XML.Xsl.XslTransform();
  transform.Load( strXSLRef );
  transform.Transform( XMLDoc , null , this.Response.Output , null );
}
else
{
  // 直接輸出生成的 XML文檔
  this.Response.Write( XmlDoc.DocumentElement.OuterXML );
}

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