嵌套标签不起作用的xsl fo

时间:2017-05-30 17:07:02

标签: xml xslt nested xsl-fo apache-fop

我尝试使用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>

1 个答案:

答案 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>