⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmloutputer.cs

📁 本程序演示了在ASP.NET中使用XML/XSLT
💻 CS
字号:
using System;
using System.Xml ;
using System.Xml.XPath ;
using System.Xml.Xsl ;

namespace cs_discovery
{
	/// <summary>
	/// XML文档输出对象
	/// </summary>
	public sealed class XMLOutputer
	{

		/// <summary>
		/// 获得某个XML节点的带缩进处理的XML字符串
		/// </summary>
		/// <param name="node">XML节点</param>
		/// <returns>生成的XML字符串</returns>
		public static string GetIndentString( object obj )
		{
			System.IO.StringWriter myStrWriter = new System.IO.StringWriter();
			System.Xml.XmlTextWriter myXmlWriter = new XmlTextWriter( myStrWriter );
			myXmlWriter.IndentChar = ' ' ;
			myXmlWriter.Indentation = 3 ;
			myXmlWriter.Formatting = System.Xml.Formatting.Indented ;
			myXmlWriter.WriteStartDocument();
			if( obj is System.Xml.XmlNodeList )
			{
				myXmlWriter.WriteStartElement("Result");
				foreach( System.Xml.XmlNode node in (( System.Xml.XmlNodeList ) obj ) )
				{
					node.WriteTo( myXmlWriter );
				}
				myXmlWriter.WriteEndElement();
			}
			else if( obj is System.Xml.XmlNode )
			{
				(( System.Xml.XmlNode ) obj ).WriteTo( myXmlWriter );
			}
			myXmlWriter.WriteEndDocument();
			myXmlWriter.Close();
			string xml = myStrWriter.ToString();
			int index = xml.IndexOf("?>");
			if( index > 0 )
			{
				xml = xml.Substring( index + 2 );
			}
			return xml ;
		}

		/// <summary>
		/// 创建一个数据库连接对象
		/// </summary>
		/// <returns>创建的的数据库连接对象</returns>
		public static System.Data.IDbConnection CreateConnection()
		{
			System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
			conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
				+ System.Web.HttpContext.Current.Request.MapPath("demomdb.mdb");
			conn.Open();
			return conn ;
		}
		
		/// <summary>
		/// 获得包含数据库查询结果的XML文档对象
		/// </summary>
		/// <param name="strSQL">SQL查询语句</param>
		/// <returns>包含查询结果的XML文档对象</returns>
		public static System.Xml.XmlDocument CreateRecordXMLDocument( string strSQL )
		{
			using( System.Data.IDbConnection conn = CreateConnection())
			{
				using( System.Data.IDbCommand cmd = conn.CreateCommand())
				{
					cmd.CommandText = strSQL ;
					System.Data.IDataReader reader = cmd.ExecuteReader();
					
					System.IO.StringWriter myStrWriter = new System.IO.StringWriter();
					OutRecordXML( reader , myStrWriter , null );
					reader.Close();
					myStrWriter.Close();

					System.Xml.XmlDocument doc = new XmlDocument();
					doc.LoadXml( myStrWriter.ToString());
					return doc ;
				}
			}
		}

		/// <summary>
		/// 输出记录XML文档
		/// </summary>
		/// <param name="strSQL">查询数据库使用的SQL语句</param>
		/// <param name="writer">输出文本的书写器对象</param>
		/// <param name="strXSLRef">引用的XSLT文件名</param>
		public static void OutRecordXML( 
			string strSQL ,
			System.IO.TextWriter writer ,
			string strXSLRef )
		{
			using( System.Data.IDbConnection conn = CreateConnection())
			{
				using( System.Data.IDbCommand cmd = conn.CreateCommand())
				{
					cmd.CommandText = strSQL ;
					System.Data.IDataReader reader = cmd.ExecuteReader();
					OutRecordXML( reader , writer , strXSLRef );
					reader.Close();
				}
			}
		}

		/// <summary>
		/// 输出记录XML文档
		/// </summary>
		/// <param name="strSQL">查询数据库使用的SQL语句</param>
		/// <param name="strXSLRef">引用的XSLT文件名</param>
		public static string OutRecordString( string strSQL , string strXSLRef )
		{
			using( System.Data.IDbConnection conn = CreateConnection())
			{
				using( System.Data.IDbCommand cmd = conn.CreateCommand())
				{
					cmd.CommandText = strSQL ;
					System.Data.IDataReader reader = cmd.ExecuteReader();
					System.IO.StringWriter myStrWriter = new System.IO.StringWriter();
					OutRecordXML( reader , myStrWriter , strXSLRef );
					reader.Close();

					if( strXSLRef == null || strXSLRef.Length == 0 )
					{
						return myStrWriter.ToString();
					}

					myStrWriter.Close();
					XslTransform transform = new XslTransform();
					transform.Load(System.Web.HttpContext.Current.Request.MapPath( strXSLRef ) );
					XPathDocument doc = new XPathDocument(
						new System.IO.StringReader( myStrWriter.ToString()));
					myStrWriter = new System.IO.StringWriter();
					transform.Transform( doc , null , myStrWriter , null );
					return myStrWriter.ToString();
				}
			}
		}

		/// <summary>
		/// 将查询数据库所得结果输出到一个XML文档中
		/// </summary>
		/// <param name="reader">查询所得数据的读取器</param>
		/// <param name="writer">保存输出文本的书写器</param>
		/// <param name="strXSLRef">使用的XSLT样式表链接地址,可以为空</param>
		private static void OutRecordXML( 
			System.Data.IDataReader reader ,
			System.IO.TextWriter writer , 
			string strXSLRef )
		{
			// 获得所有字段名
			int FieldCount = reader.FieldCount ;
			string[] FieldNames = new string[ FieldCount ] ;
			for( int iCount = 0 ; iCount < FieldCount ; iCount ++ )
			{
				FieldNames[ iCount ] = reader.GetName( iCount );
			}
			// 生成一个XML文档书写器
			System.Xml.XmlTextWriter xmlwriter = new System.Xml.XmlTextWriter( writer );
			xmlwriter.Indentation = 3 ;
			xmlwriter.IndentChar = ' ';
			xmlwriter.Formatting = System.Xml.Formatting.Indented ;
			xmlwriter.WriteStartDocument();
			// 输出XSLT样式表链接
			if( strXSLRef != null && strXSLRef.Length > 0 )
			{
				xmlwriter.WriteProcessingInstruction(
					"xml-stylesheet" , 
					"type='text/xsl' href='" + strXSLRef + "'");
			}
			xmlwriter.WriteStartElement("Table");
			while( reader.Read())
			{
				xmlwriter.WriteStartElement("Record");
				for( int iCount = 0 ; iCount < FieldCount ; iCount ++ )
				{
					xmlwriter.WriteStartElement( FieldNames[ iCount ] );
					object v = reader.GetValue( iCount );
					if( v == null || DBNull.Value.Equals( v ))
					{
						xmlwriter.WriteAttributeString("Null" , "1");
					}
					else
					{
						xmlwriter.WriteString( Convert.ToString( v ));
					}
					xmlwriter.WriteEndElement();
				}
				xmlwriter.WriteEndElement();
			}
			xmlwriter.WriteEndElement();
			xmlwriter.WriteEndDocument();
		}

		private XMLOutputer(){}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -