我有一个 XHTML 模板。我想从 XHTML 模板创建一个 XSL FO。如何将 XHTML 转换为 XSLFO?我通过使用 XHTML 文件的字符串替换来创建 XSL FO。是否可以在不使用字符串替换的情况下为模板创建 XSL FO?下面是我的 XHTML 模板。
< div>
{:header:}{:date:}
< p>
{:mailingattn:} < br />
{:facilityname:} < br />
{:facilitystreet:} < br />
{:facilitystreet2:} <br />
{:facilitycity:}, {:facilitystate:} {:facilityzip:} < br />
{:facilitycountry:}
< /p>
< br />
< p>abcd,</p>
< p>The Department of abcd:< /p>
< p>{:checkreturnreason:}< /p>
< p>{:message:}< /p>
< pnext>If you have any questions or need assistance, please feel free to abcd:< /pnext>
< pnext>Sincerely, <br />
{:signature:}
< /pnext>
{:footer:}
< /div>
预定义的 XSL FO 模板
< xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
< xsl:output method="xml"/>
< !--
expects a rootpath attribute in one of the tags. this should correspond to the
physical path of the apps folder without the ending slash
-->
< xsl:variable name="rootpath"
select="//@rootpath" />
< xsl:template match="/">
< xsl:apply-templates/>
< /xsl:template>
< xsl:template match="div">
< xsl:apply-templates/>
< /xsl:template>
< xsl:template match="img">
< fo:external-graphic height="auto" width="auto">
< xsl:attribute name="src">
< xsl:value-of select="concat($rootpath, substring-after(@src,'../..'))" />
< /xsl:attribute>
< /fo:external-graphic>
< /xsl:template>
< xsl:template match="xsl:value-of">
< xsl:copy-of select="." />
< /xsl:template>
< xsl:template match="br">
< fo:block>
< /fo:block>
< /xsl:template>
< xsl:template match="p">
< fo:block space-before="8pt" space-after="4pt">
< xsl:apply-templates/>
< /fo:block>
< /xsl:template>
< xsl:template match="pnext">
< fo:block keep-with-next="always" space-before="8pt" space-after="4pt">
< xsl:apply-templates/>
< /fo:block>
< /xsl:template>
< xsl:template match="table">
< fo:table width="100%" font-family="Arial">
< fo:table-body>
< xsl:for-each select="tr">
< fo:table-row>
< xsl:for-each select="td">
< xsl:variable name="width">
< xsl:value-of select="@width"/>
< /xsl:variable>
< fo:table-cell padding-top='4pt' width="{$width}">
< xsl:for-each select="span">
< xsl:variable name="fsize">
< xsl:value-of select="@size"/>
< /xsl:variable>
< fo:block font-size="{$fsize}pt" text-align="right">
< xsl:apply-templates/>
< /fo:block>
< /xsl:for-each>
< /fo:table-cell>
< /xsl:for-each>
< /fo:table-row>
< /xsl:for-each>
< fo:table-row>
< fo:table-cell border=".2pt solid black">
< /fo:table-cell>
< fo:table-cell border=".2pt solid black">
< /fo:table-cell>
< /fo:table-row>
< /fo:table-body>
< /fo:table>
< /xsl:template>
< /xsl:stylesheet>