如何将段落中的某些文本转换为粗体xsl-fo



这就是我的xml的样子:

xml:

<Documents>
<Document>
<Note>
<Header>
<HeaderText> &lt;b&gt;Need Help?&lt;/b&gt; Contact Our Customer Happiness Team
by phone  &lt;b&gt;0345 00002662&lt;/b&gt;
Mon-Fri 9am-7pm
</HeaderText>
</Header>
</Note>
</Document>
</Documents>

我想将HeaderText中的一些文本转换为粗体。E.g需要帮助吗联系我们的客户幸福团队通过电话0345 00002662周一至周五上午9点至晚上7点

Xslt:

<fo:table-header text-align="left" border-width="0mm">
<fo:table-row margin-left="1cm" font-family="Avenir" font-size="14pt">
<fo:table-cell>
<fo:block padding-top="0cm">
<xsl:value-of select="HeaderText" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>

&lt;b&gt;Need Help?&lt;/b&gt;只是XSLT处理器和XSL-FO格式化程序的文本。

这类似于XSLT-如何将节点内的内联/转义XML视为嵌套节点。这里的建议不仅仅是两次通过或者使用XSLT2.0或3.0。

如果&lt;b&gt;是唯一需要转换为实际标记的非元素,那么可以使用递归模板:

<xsl:template match="text()[contains(., '&lt;b>')]"
name="unescape-bold">
<xsl:param name="text" select="." />
<xsl:choose>
<xsl:when test="not(contains($text, '&lt;b>'))">
<xsl:value-of select="$text" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($text, '&lt;b>')" />
<fo:inline font-weight="bold">
<xsl:value-of
select="substring-before(substring-after($text, '&lt;b>'),
'&lt;/b>')" />
</fo:inline>
<xsl:call-template name="unescape-bold">
<xsl:with-param name="text"
select="substring-after($text, '&lt;/b>')" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

对于您的样品,这给出:

<fo:inline font-weight="bold">Need Help?</fo:inline> Contact Our Customer Happiness Team
by phone  <fo:inline font-weight="bold">0345 00002662</fo:inline>
Mon-Fri 9am-7pm

检查此代码:-

<fo:table-header text-align="left" border-width="0mm">
<fo:table-row margin-left="1cm" font-family="Avenir" font-size="14pt">
<fo:table-cell>
<fo:block padding-top="0cm">
<xsl:apply-templates/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<xsl:template match="bold">
<fo:inline font-weight="bold">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>

相关内容

  • 没有找到相关文章

最新更新