我尝试使用Apache FOP创建PDF文件。很多东西都工作得很好但是我无法使用嵌套标签成功。这个名字" Doe"没有以粗体显示。 非常感谢
以下是我的数据和xsl-fo文件:
数据
<?xml version="1.0" encoding="UTF-8"?>
<patient>
<name>Joe <bold>Doe</bold></name>
</patient>
文件
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="patient">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="introA4" page-height="29.7cm" page-width="21cm" margin-top="7cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="introA4">
<fo:flow flow-name="xsl-region-body" color="#808285">
<fo:block font-size="16pt" space-after="0mm">
<xsl:value-of select="name"/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="bold">
<fo:inline font-weight="bold" color="red">
<!--xsl:apply-templates select="node()"/-->
<!--xsl:apply-templates select="patient/bold"/-->
<xsl:apply-templates/>
<!--xsl:value-of select="bold"/-->
</fo:inline>
</xsl:template>
<xsl:template match="boldGold">
<fo:inline font-family="OpenSans-ExtraBold" font-weight="bold" color="red">
<xsl:value-of select="boldGold"/>
</fo:inline>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
变化:
<xsl:value-of select="name"/>
为:
<xsl:apply-templates select="name"/>
使用xsl:value-of
,您只需获取name
元素的字符串值。使用xsl:apply-templates
,您将指示XSLT处理器查找并使用您选择的节点的最佳匹配模板。
另一种方法是让name
的模板生成fo:block
:
<xsl:template match="patient">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="introA4"
page-height="29.7cm" page-width="21cm"
margin-top="7cm" margin-bottom="2cm"
margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="introA4">
<fo:flow flow-name="xsl-region-body" color="#808285">
<xsl:apply-templates />
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="name">
<fo:block font-size="16pt" space-after="0mm">
<xsl:apply-templates />
</fo:block>
</xsl:template>
<xsl:template match="bold">
<fo:inline font-weight="bold" color="red">
<xsl:apply-templates/>
</fo:inline>
</xsl:template>