如何在 xslt 中进行递归模板匹配
How to do a recursive template match in xslt
我有一个文本里面有 html,我正在尝试渲染其中的 html。但是当里面有嵌套标签时我遇到了问题。
例如:在我的 XML
<section>
<p><u><em><b>Hello</b></em></u></p>
</section>
在我的 XSLT 中我喜欢
<xsl:choose>
<xsl:when test="section/b">
<fo:inline font-weight="bold"><xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:when>
<xsl:when test="section/u">
<fo:inline text-decoration="underline"><xsl:apply-
templats select="*|text()"/>
</fo:inline>
</xsl:when>
<xsl:when test="section/em">
<fo:inline font-style="italic"><xsl:apply-
templats select="*|text()"/>
</fo:inline>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="section"/>
</xsl:otherwise>
</xsl:choose>
但它没有在我的 PDF 中呈现。
是否有匹配标签的方法或任何进行递归模板匹配的方法,或任何其他解决方案?
有什么想法/建议吗?
使用多个模板,它们将递归应用:
<xsl:template match="b">
<fo:inline font-weight="bold">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
<xsl:template match="u">
<fo:inline text-decoration="underline">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
<xsl:template match="em">
<fo:inline font-style="italic">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
我有一个文本里面有 html,我正在尝试渲染其中的 html。但是当里面有嵌套标签时我遇到了问题。
例如:在我的 XML
<section>
<p><u><em><b>Hello</b></em></u></p>
</section>
在我的 XSLT 中我喜欢
<xsl:choose>
<xsl:when test="section/b">
<fo:inline font-weight="bold"><xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:when>
<xsl:when test="section/u">
<fo:inline text-decoration="underline"><xsl:apply-
templats select="*|text()"/>
</fo:inline>
</xsl:when>
<xsl:when test="section/em">
<fo:inline font-style="italic"><xsl:apply-
templats select="*|text()"/>
</fo:inline>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="section"/>
</xsl:otherwise>
</xsl:choose>
但它没有在我的 PDF 中呈现。
是否有匹配标签的方法或任何进行递归模板匹配的方法,或任何其他解决方案?
有什么想法/建议吗?
使用多个模板,它们将递归应用:
<xsl:template match="b">
<fo:inline font-weight="bold">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
<xsl:template match="u">
<fo:inline text-decoration="underline">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>
<xsl:template match="em">
<fo:inline font-style="italic">
<xsl:apply-templates select="*|text()"/>
</fo:inline>
</xsl:template>