有人知道 XSLT 的预处理器以使其不那么冗长吗?就像SASS 之于 CSS 一样,有点前卫,需要轻量级的语法:
"/":
{
<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:
<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 形式,但我相信你已经明白我的意思了。
或者是否有一个比其他 IDE 更了解 XSLT 的 IDE,例如它显示{author}
但扩展为:
<xsl:value-of select="author" />
当你点击它?