HtmlFo Transformer(一个XSL文件,它应该具有将HTML的样式属性复制到FO的逻辑)
我使用javax.xml.transform.Transformer使用XSL解析器将XHTML转换为XSL-FO。但是我使用的解析器无法将样式属性复制到XSL-FO。HtmlFo Transformer(一个XSL文件,它应该具有将HTML的样式属性复制到FO的逻辑),html,xslt,xsl-fo,css-to-pdf,Html,Xslt,Xsl Fo,Css To Pdf,我使用javax.xml.transform.Transformer使用XSL解析器将XHTML转换为XSL-FO。但是我使用的解析器无法将样式属性复制到XSL-FO。 因此,您可以帮助使用有效的解析器,该解析器应该能够将带有样式属性的XHTML解析为XSL-FO。您可以在这个简单的示例上进行扩展,使用choose结构消除/更改名称以识别XSL-FO属性。HTML中有一些东西,比如以“-moz”开头的样式,在XSL FO中可能没有任何意义。还有一些需要调整。您还需要处理不在@style属性中的直
因此,您可以帮助使用有效的解析器,该解析器应该能够将带有样式属性的XHTML解析为XSL-FO。您可以在这个简单的示例上进行扩展,使用choose结构消除/更改名称以识别XSL-FO属性。HTML中有一些东西,比如以“-moz”开头的样式,在XSL FO中可能没有任何意义。还有一些需要调整。您还需要处理不在
@style
属性中的直接属性(如@colspan
或@rowspan
)
考虑到这个简单的输入:
<p style="font-size:12pt; font-weight:bold; color: red">This is a sample</p>
这是一个示例
使用此XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="p">
<fo:block>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="@style">
<xsl:variable name="styleList" select="tokenize(.,';')"/>
<xsl:for-each select="$styleList">
<xsl:attribute name="{normalize-space(substring-before(.,':'))}">
<xsl:value-of select="normalize-space(substring-after(.,':'))"/>
</xsl:attribute>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
您将获得以下输出:
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" font-size="12pt" font-weight="bold" color="red">This is a sample</fo:block
这是一个示例将样式属性从HTML复制到XSL FO对您没有任何帮助。XSL FO中没有这样的属性。您需要一个处理样式并写出正确的XSL FO等效结构的XSLT。@KevinBrown是的,需要一个处理样式并写出正确的XSL FO等效结构的XSLT。。。任何关于标准XSLT的想法都可以做到这一点。您应该指定您的目标XSL版本。2.0及以上版本使用tokenize()会有点微不足道,但1.0需要递归。感谢@KevinBrown更新,是的,我使用的XSL版本是2.0。你能分享更多关于tokenize()的信息吗?或者我可以分享tokenize()信息的任何链接