假设我有一个XML文件:
<document>
<title>How the West was Won</title>
<chapter>
Lorem Ipsum Blah .....
</chapter>
</document>
是否可以使用XSLT或XSLFO或XSL来呈现如下标题:
How the West was Won
--------------------
Lorem Ipsum Blah .....
如何在标题后的行上生成正确数量的短划线?
答案 0 :(得分:2)
我知道这非常不典型,但您也可以使用模板模式:
<xsl:template match="title">
<xsl:variable name="dashes">
<xsl:apply-templates select="." mode="dashes"/>
</xsl:variable>
<xsl:value-of select="concat(.,' ',$dashes,' ')"/>
</xsl:template>
<xsl:template match="text()" mode="dashes">
<xsl:param name="length" select="string-length() - 1"/>
<xsl:text>-</xsl:text>
<xsl:apply-templates select="self::text()[boolean($length)]"
mode="dashes">
<xsl:with-param name="length" select="$length - 1"/>
</xsl:apply-templates>
</xsl:template>
答案 1 :(得分:1)
试试这个:
<xsl:template match="title">
<xsl:value-of select="text()"/>
<xsl:text>
</xsl:text>
<xsl:call-template name="Underline">
<xsl:with-param name="length" select="string-length(text())"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="Underline">
<xsl:param name="length"/>
<xsl:choose>
<xsl:when test="$length > 0">-<xsl:call-template name="Underline"><xsl:with-param name="length" select="$length - 1"/></xsl:call-template></xsl:when>
</xsl:choose>
</xsl:template>
Underline
是一个递归模板,输出给定数量的破折号。
答案 2 :(得分:1)
这是另一种情况,它在XSLT 2.0中更简单。
<xsl:for-each select="1 to string-length(title)">-</xsl:for-each>