首页 > 代码库 > XSLT 调用外部程序

XSLT 调用外部程序

通常可以通过xslt把一个xml转成html

cd.xml

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://www.mamicode.com/cd_apply.xslt"?><collection>  <cd>    <title>Boys for Pele</title>    <artist>Tori Amos</artist>    <tracks>      <track type="vocal">        <name>Horses</name>        <length>3.5</length>      </track>      <track type="instrumental">        <name>Blood roses</name>        <length>3.2</length>      </track>      <track type="vocal">        <name>Father lucifer</name>        <length>3.8</length>      </track>      <track type="instrumental">        <name>Professional widow</name>        <length>4.1</length>      </track>      <track type="vocal">        <name>Mr. Zebra</name>        <length>3.6</length>      </track>    </tracks>  </cd>  <cd>    <title>The Ghosts that Hunt me</title>    <artist>Crash TestDummies</artist>    <tracks>      <track type="vocal">        <name>Winter song</name>        <length>4.3</length>      </track>      <track type="instrumental">        <name>Comin‘s back soon</name>        <length>4.1</length>      </track>      <track type="vocal">        <name>Superman‘s song</name>        <length>4.1</length>      </track>      <track type="vocal">        <name>Here on earth</name>        <length>3.1</length>      </track>    </tracks>  </cd></collection>

cd.apply.xslt

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    <xsl:template match="/">        <html>            <body><xsl:apply-templates/></body>        </html>    </xsl:template>        <xsl:template match="collection">        <xsl:apply-templates/>    </xsl:template>        <xsl:template match="cd">        <center>            <xsl:apply-templates/>        </center>    </xsl:template>        <xsl:template match="title">        <font size="5"><b><xsl:value-of select="."/>:</b></font>    </xsl:template>        <xsl:template match="artist">        <font size="5"><i><xsl:value-of select="."/></i></font>        </xsl:template>    <xsl:template match="tracks">            <table border="1">            <tr>                <th>Name</th>                <th>Length</th>                <th>Type</th>            </tr>            <xsl:apply-templates/>                </table>        <br/><br/>    </xsl:template>            <xsl:template match="track">        <tr>            <td><xsl:value-of select="name"/></td>            <td><xsl:value-of select="length"/></td>            <td><xsl:value-of select="@type"/></td>        </tr>    </xsl:template></xsl:stylesheet>

有时可以调用一个外部程序的方法进行转换,比如外部类叫做Transformer

XslCompiledTransform xslt = new XslCompiledTransform();XsltSettings xsltset = new XsltSettings();xslt.Load(path, xsltset, null);var arguments = new XsltArgumentList();arguments.AddExtensionObject("urn:transformer", new Transformer());xsltDOE2.Transform(.., arguments, ..);

xslt做相应修改

xmlns:transformer="urn:transformer"  //加一个namespace
<xsl:value-of select="transformer:Transform(.)"/>

C#代码

 public class Transformer    {        public string Transform(XPathNavigator navigator, double value1, bool value2)        {           ...        }        public string Transform(XPathNodeIterator iterator)        {            ...        }}            

 

XSLT 调用外部程序