XSLT主页?

时间:2011-05-09 18:27:20

标签: asp.net xml xslt master-pages

我正在创建一个Web应用程序,其中页面是xml,他们使用xslt样式表来创建xhtml输出。

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

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

2 个答案:

答案 0 :(得分: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​​

答案 1 :(得分:2)

我这样做是为了解决以前的生活 - 更具体地说,我有人为我做了相当大的一部分( - :

从根本上说,你只需要两件事,XML和XSLT - 其余的只是管道而且可能不需要。 XSLT足以完成您想要的所有布局,因此只需将XML连接到页面即可。

就XSLT而言,通过使用在特定页面类型模板中定义/覆盖的模板,使用包含和内容,您很容易获得主页类型的功能。

我们使用的方法是使用路由和早期MVC堆栈的一些其他元素 - 一点拉动XML,一点拉动XSLT,一点代码将它们连接在一起并将params推入XSLT,最后只是将结果HTML推送到客户端。

如果你有一个追逐,你会发现各种各样的人通过MVC的XML / XSLT视图引擎做了有趣的事情。

就“这是一个好方法”而言 - 对于我来说,对于客户特定的CMS(运行单一生成的XML文件)而言,它非常好用,并且从根本上说,Umbraco是在使用XSLT呈现XML的相同前提下构建的(虽然随着Razor向Umbraco的引入,这种情况有所改变。