Как сделать рекурсивное сопоставление с шаблоном в xslt - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть текст с 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.

Есть ли способ сопоставить теги или какие-либо способы сделать рекурсивное сопоставление с шаблоном, или любые другие решения?

Есть идеи / предложения?

1 Ответ

0 голосов
/ 28 декабря 2018

Используйте несколько шаблонов, они будут применяться рекурсивно:

  <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>
...