ASP.NET XML/XSL Transforms(转载www.aspalliance.com)

发表于:2007-06-30来源:作者:点击数: 标签:
Transforming an XML document using XSL/T and outputting the results to the browser is a fairly simple task in ASP.NET. The following user control demonstrates the ease with which this can be accomplished. This user control has a parameter f
Transforming an XML document using XSL/T and outputting the results to the browser is a fairly simple task in ASP.NET. The following user control demonstrates the ease with which this can be aclearcase/" target="_blank" >ccomplished. This user control has a parameter for the XML source(xmlSource), and a parameter for the XSL source(xslSource). When placing this user control on a page, simply specify both values (using relative paths, since they are Server.MapPath@#ed within the user control) and you@#re done! The transformed result will be output to Response.Output and sent to the user@#s browser. You can use this to create a two line ASPX file that simply uses this user control to render its output. By using Output and/or Fragment caching, you can ensure that the CPU load required to transform the XML is minimized.

<%@ Control Language="c#" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Xml.XPath" %>
<script runat="server" language="c#">
public string xmlSource, xslSource;
void Page_Load(){
    XmlDocument docXml = new XmlDocument();
    docXml.Load(Server.MapPath(xmlSource));
    XslTransform docXsl = new XslTransform();
    docXsl.Load(Server.MapPath(xslSource));
    docXsl.Transform(docXml,null,Response.Output);
//    chapter.Text = docXml.TransformNode(docXsl);
}
</script>

An example of a page using this user control, Output Caching for 1 minute:

<%@Page%>
<%@ Register TagPrefix="authors" tagname="chapters" src="/controls/chapters.ascx"%>
<%@ OutputCache Duration="60" VaryByParam="none" %>
<authors:chapters id="chapters" runat="server"
    xmlSource="chapter.xml" xslSource="chapter.xsl" />

To test this out, you can use the following two files:

chapter.xml
<chapter>
    <!-- Chapter Name -->
    <name>Chapter Name</name>
    
    <!-- Author -->
    <author>
        <name>Steven Smith</name>
        <email>ssmith@aspalliance.com</email>
        <website>http://aspalliance.com/stevesmith/</website>
    </author>
    
    <!-- Examples from Chapter -->
    <examples>
    
        <example>
            <!-- The number from the book, e.g. 2.3 -->
            <reference>2.1</reference>
            
            <!-- Link to working example -->
            <demo>
                <url>hellovb.asp</url>
                <link_text>HelloVB.asp</link_text>
            </demo>
            
            <!-- Link to source code -->
            <source>
                <url>hellovb.txt</url>
                <link_text>HelloVB.asp source</link_text>
            </source>
            
            <!-- Description of the example -->
            <description>Hello World using Classic ASP.</description>
        </example>
        
    </examples>

</chapter>


chapter.xsl
<?xml version="1.0" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" />

<xsl:template match="/">
    <p>
   <xsl:apply-templates select="chapter" />
   </p>
</xsl:template>

<xsl:template match="/chapter" >
    <b><xsl:value-of select="name"/></b>
   <br/>
   by <xsl:apply-templates select="author" />
   <br/><br/>
   <xsl:apply-templates select="examples" />
</xsl:template>

<xsl:template match="author" >
    <i><xsl:value-of select="name"/></i>
</xsl:template>

<xsl:template match="examples" >
    <table bgcolor="#000033">
        <tr bgcolor="#CCCCFF">
            <th>Reference</th>
            <th>Demo</th>
            <th>Source</th>
            <th>Description</th>
        </tr>
        <xsl:apply-templates select="example" />
    </table>
</xsl:template>

<xsl:template match="example" >
    <tr bgcolor="#DDDDDD">
        <td><xsl:value-of select="reference"/></td>
        <td>
            <a>
                <xsl:attribute name="href">
                    <xsl:value-of select="demo/url"/>
                </xsl:attribute>
                <xsl:value-of select="demo/link_text"/>
            </a>
        </td>
        <td>
            <a>
                <xsl:attribute name="href">
                    <xsl:value-of select="source/url"/>
                </xsl:attribute>
                <xsl:value-of select="source/link_text"/>
            </a>
        </td>
        <td><xsl:value-of select="description"/></td>
    </tr>
</xsl:template>



</xsl:transform>

原文转自:http://www.ltesting.net