寻找(伪)XSLT预处理器/模板,使其更简洁 [英] Looking for a (pseudo) XSLT preprocessor/templater to make it less verbose

查看:120
本文介绍了寻找(伪)XSLT预处理器/模板,使其更简洁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有人知道XSLT的预处理器使它更简洁?类似 SASS 的内容对CSS而言,这需要一些简单的语法:

Does anybody know of a preprocessor for XSLT to make it less verbose? Something like what SASS is to CSS, a little proggy that will take light syntax:

"/":
{
 <html>
  <head>
  <title>My book collection</title>
  </head>
  <body>
  {@ "//media"}
  {@ quantity = calc_abs_value("//total_quantity")}
  Price : {@ multiply(price:"//item[@selected='true'][@price]",qty  :$quantity) }
  </body>  
 </html>
}

"media[@type='book']":
{
 <div id="{@id}">
 {title} by {author} published in {published_date}
 </div>
}

function calc_abs_value(value)
{
 if ($value < 0) {- $value} else {$value}
}

function multiply(price,qty:"1")
{
 switch 
 {
  "$qty = 1" : $price * $qty 
  "$qty < 5" : $price * $qty * 0.95 
  "$price * $qty < 0" : 0
  default : 0
 }
}

并将其变为远不易读取的XSLT:

and turn this into far-less readable XSLT:

    <xsl:template match="/">
     <html>
      <head>
      <title>My book collection</title>
      </head>
      <body>
      <xsl:apply-templates select="//media" />
      <xsl:variable name="quantity"><xsl:call-template name="calc_abs_value">
      <xsl:with-param name="value"><xsl:value-of select="//total_quantity" /></xsl:with-param>
      </xsl:call-template></xsl:variable>
      Price : <xsl:call-template name="multiply">
      <xsl:with-param name="price"><xsl:value-of select="//item[@selected='true'][@price]" /></xsl:with-param>
      <xsl:with-param name="qty"><xsl:value-of select="$quantity" /></xsl:with-param>
      </xsl:call-template>
      </body>  
     </html>
    </xsl:template>


    <xsl:template match="media[@type='book']">
    {
     <div id="{@id}">
     <xsl:value-of select="title" /> by <xsl:value-of select="author" /> published in <xsl:value-of select="published_date" />
     </div>
    }
    </xsl:template>


    <xsl:template name="calc_abs_value">
    <xsl:param name="value" />
    <xsl:choose>
      <xsl:when test="$value < 0">
       - <xsl:value-of select="$value" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$value" />
      </xsl:otherwise>
    </xsl:choose>
    </xsl:template>

我懒得写XSLT形式的乘法,但我相信你已经弄明白了我的意思是。

I am too lazy to write the XSLT form of multiply but I'm sure you already figured out what I mean.

或者是否有比其他人更了解XSLT的IDE,例如它显示 {author} 但扩展为:

Or is there an IDE that is more XSLT aware than others, e.g it displays {author} but expands to:

<xsl:value-of select="author" />

推荐答案

你应该更好地问:如何 DSL XSLT?

您可能对某些实际示例感兴趣,例如 YSLT 基于 YML 概念。

You might be interested in some practical example such as YSLT based on YML concept.

注意最好不要转换/预处理代码以获取完全是XSLT转换;相反,只是模仿处理器解析输入文档并使用你自己的DSL的方式。

NOTE It should be better not to convert/preprocess the code to get an XSLT transform at all; instead, just emulate the way a processor parses the input document and use your own DSL.

你也可以自己编写DSL。你应该使用一些真正使DSL概念变得容易的脚本语言,例如 ruby​​ 。在 ruby​​ 中,您可以获得非常漂亮和干净的内容,例如:

You can also write your own DSL. You should use some scripting language which really makes DSL concept easy, as, for example, ruby. In ruby, you can achieve something very nice and clean like:

match "/" do
 value-of :foo
end

可以作为:

<xsl:template match="/">
 <xsl:value-of select="foo"/>
</xsl:template>






值得一提的另一件事是模板语言,如 erb 。这是我认为一般来说XSLT唯一可行的替代方案(即使这里的替代方案是一个很大的折衷方案,你很快就会对节点的程序操作感到迷茫)。


Another thing that worth to be mentioned is templating languages like erb. This is I think the only feasible alternative to XSLT in general (even if alternative here is a big compromise and you get lost very soon with procedural manipulation of nodes).

注意

我喜欢XSLT详细程度 ,由于这种冗长,我认为XSLT代码比任何其他语言更具可读性(一旦了解了模板的工作原理) )。

I love XSLT verbosity and, because of this verbosity, I think XSLT code is much more readable then any other language (once you understand how templates work).

建议搜索将某些不同标记转换为XSLT代码的内容。您的最终XSLT代码可读性,其代码根本不是最佳

I don't recommend to search something for converting some different markup to XSLT code. Your final XSLT code will loose of readbility and its code will not be optimal at all.

这篇关于寻找(伪)XSLT预处理器/模板,使其更简洁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆