xslt / xml / c# (转)
这个例程展示了如何将xslt 应用于从数据库中读出的xml格式数据上. 例程完全使用c#语言编写:
using system;
using system.collections;
using system.data;
using system.data.sqlclient;
using system.xml;
using system.xml.xsl;
public class xslttransform
{
public static void transform()
{
sqlconnection nwindconn = new sqlconnection("data
source=inmumis123;database=northwind;uid=sa;pwd=;");
nwindconn.open();
dataset custds = new dataset("customerdataset");
sqldataadapter custda = new sqldataadapter("select * from customers",
nwindconn);
custda.fill(custds, "customers");
sqldataadapter ordersda = new sqldataadapter("select * from orders",
nwindconn);
ordersda.fill(custds, "orders");
nwindconn.close();
custds.relations.add("custorders",
custds.tables["customers"].columns["customerid"],
custds.tables["orders"].columns["customerid"]).nested = true;
xmldatadocument xmldoc = new xmldatadocument(custds);
xsltransform xsltran = new xsltransform();
xsltran.load("transform.xsl");
// this is for generating the output in new html
xmltextwriter writer = new xmltextwriter("xslt_output.html",
system.text.encoding.utf8);
writer.close();
// this is for writing in the current page
xsltran.transform(xmldoc, null, response.outputstream);
}
}
上面这个称为xslttransform的类连接到一个数据库,将数据填充到xmldocument 中,然后将下面提供的xslt应用于这个xml.
<%@ page language="c#"%>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
<head>
<meta name="generator" content="microsoft visual studio 7.0">
<meta name="code_language" content="c#">
<meta name="vs_defaultclientscript" content="javascript (ecmascript)">
<meta name="vs_targetschema" content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<script>
public void page_load(object sender, system.eventargs e)
{
transform();
}
public void transform()
{
sqlconnection nwindconn = new sqlconnection("data
source=inmumis123;database=northwind;uid=sa;pwd=;");
nwindconn.open();
dataset custds = new dataset("customerdataset");
sqldataadapter custda = new sqldataadapter("select * from customers",
nwindconn);
custda.fill(custds, "customers");
sqldataadapter ordersda = new sqldataadapter("select * from orders",
nwindconn);
ordersda.fill(custds, "orders");
nwindconn.close();
custds.relations.add("custorders",
custds.tables["customers"].columns["customerid"],
custds.tables["orders"].columns["customerid"]).nested = true;
xmldatadocument xmldoc = new xmldatadocument(custds);
xsltransform xsltran = new xsltransform();
xsltran.load("transform.xsl");
// xmltextwriter writer = new xmltextwriter("xslt_output.html",
system.text.encoding.utf8);
xsltran.transform(xmldoc, null, response.outputstream);
// writer.close();
}
</script>
<body ms_positioning="gridlayout">
<form id="form1" method="post" runat="server">
</form>
</body>
</html>
上面的aspx page 用这个类(xslttranform)建立了一对象, 然后调用了transform 函数
。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0">
<xsl:template match="customerorders">
<style>
body {font-family:verdana;font-size:9pt}
td {font-size:8pt}
</style>
<table border="1">
<xsl:apply-templates select="customers"/>
</table>
</xsl:template>
<xsl:template match="customers">
<tr><td>
<xsl:value-of select="contactname"/>, <xsl:value-of select="phone"/><br/>
</td></tr>
<xsl:apply-templates select="orders"/>
</xsl:template>
<xsl:template match="orders">
<table border="1">
<tr><td valign="top"><b>order:</b></td><td valign="top"><xsl:value-of select="orderid"/></td></tr>
<tr><td valign="top"><b>date:</b></td><td valign="top"><xsl:value-of select="orderdate"/></td></tr>
<tr><td valign="top"><b>ship to:</b></td>
<td valign="top"><xsl:value-of select="shipname"/><br/>
<xsl:value-of select="shipaddress"/><br/>
<xsl:value-of select="shipcity"/>, <xsl:value-of select="shipregion"/> <xsl:value-of select="shippostalcode"/><br/>
<xsl:value-of select="shipcountry"/></td></tr>
</table>
</xsl:template>
</xsl:stylesheet>
最后是这个xslt 文件
