2011-05-09 27 views
2

我正在制作一个网页应用程序,其中的页面是xml,它们使用xslt样式表创建xhtml输出。XSLT主页?

因此,很多页面布局将包含在XSLT样式表中,从某种意义上说,XSLT表单包含有关页面布局的所有常用信息,是否可以创建一个用于xslt表单??基本上我会有一个生成xml的aspx页面,并包含另一个aspx页面,这是一个xslt页面,使用母版页插入页面上的任何内容更改[仅中间窗格]。

此外,您认为这是一个很好的设计策略吗?

+0

为什么你会永远这样做事?这只是一个实验,看看是否有可能? – R0MANARMY 2011-05-09 18:38:30

+0

因为我看到有一个纯XML的Web应用程序的好处。整个网站本质上是一个平台。 – Jordan 2011-05-09 18:55:53

+0

...............? – 2011-05-09 20:48:35

回答

2

我这样做是为了在以前的生活中的解决方案 - 更具体地说我一个人做的这一个公平块,我( - :

从根本上说,你只需要两样东西,XML和XSLT - 休息只是管道,可能不需要XSLT足以完成你想要的所有布局,所以它只是一个将XML连接到页面的问题

就XSLT而言,通过使用包含和通过使用在特定页面类型模板中定义/覆盖的模板来实现母版页类型的东西。

我们使用的方法是使用路由和早期MVC堆栈的其他元素 - 一点拉XML,一点拉XSLT,一点点代码将它们连接在一起,并将参数推入XSLT,最后只是推由此产生的HTML输出给客户端。

如果你有追逐,你会发现不同的人通过MVC的XML/XSLT视图引擎做了很多有趣的事情。

就“这是一个好方法”而言 - 它对我来说非常适合客户特定的CMS(运行单个生成的XML文件),并且从根本上说,Umbraco建立在使用XSLT来呈现XML的同一前提上(尽管随着剃刀向Umbraco的推出,情况有所改变)。

3

这就是我所说的“填空”技术,是的,它是一个非常好的设计模式,它允许分离呈现和处理逻辑,并能够有很多不同的输出格式,而无需更改转换。

下面是使用该技术的完整和非常短的例如:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pMasterPage" select= 
    "'file:///c:/temp/delete17.xml'"/> 

<xsl:variable name="vDoc" select="/"/> 

<xsl:template match="node()|@*"> 
    <xsl:param name="pInput"/> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"> 
    <xsl:with-param name="pInput" select="$pInput"/> 
    </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:apply-templates select="document($pMasterPage)/*"> 
    <xsl:with-param name="pInput" select="$vDoc"/> 
    </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="first-name|last-name|age"> 
    <xsl:param name="pInput"/> 
    <xsl:value-of select="$pInput/*/*[name()=name(current())]"/> 
</xsl:template> 

</xsl:stylesheet> 

当在下面的XML文档施加这种转变:

<person> 
<first-name>John</first-name> 
<last-name>Smith</last-name> 
<age>23</age> 
<nationality>British</nationality> 
</person> 

并且如果文件:c:\temp\delete17.xm l包含此文件

<html> 
<h1>Person:</h1> 

<p>First Name: <first-name/></p> 
<p>Last Name: <last-name/></p> 
<p>Age: <age/></p> 
</html> 

然后以下结果产生

<html> 
    <h1>Person:</h1> 
    <p>First Name: John</p> 
    <p>Last Name: Smith</p> 
    <p>Age: 23</p> 
</html> 

由浏览器显示为

人:

名字:约翰

姓:史密斯

年龄:23​​