これは私のxmlがどのように見えるかです:
xml:
<Documents>
<Document>
<Note>
<Header>
<HeaderText> <b>Need Help?</b> Contact Our Customer Happiness Team
by phone <b>0345 00002662</b>
Mon-Fri 9am-7pm
</HeaderText>
</Header>
</Note>
</Document>
</Documents>
HeaderTextの一部のテキストを太字に変換したいと思います。たとえば、助けが必要ですか?電話034500002662月曜から金曜の午前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>
これ<b>Need Help?</b>
は、XSLTプロセッサとXSL-FOフォーマッタへの単なるテキストです。
これはXSLTに似ています-ノード内のインライン/エスケープされたXMLをネストされたノードとして扱う方法。そこでのアドバイスは、2つのパスで実行するか、XSLT2.0または3.0を使用する以外にありません。
<b>
が実際のマークアップに変換する必要がある唯一の非要素である場合は、再帰テンプレートを使用して変換できます。
<xsl:template match="text()[contains(., '<b>')]"
name="unescape-bold">
<xsl:param name="text" select="." />
<xsl:choose>
<xsl:when test="not(contains($text, '<b>'))">
<xsl:value-of select="$text" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($text, '<b>')" />
<fo:inline font-weight="bold">
<xsl:value-of
select="substring-before(substring-after($text, '<b>'),
'</b>')" />
</fo:inline>
<xsl:call-template name="unescape-bold">
<xsl:with-param name="text"
select="substring-after($text, '</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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加