我正在尝试从HTML创建PDF。我想将内容保存在不包含子表的行上。我找到了相应的行,但没有任何反应,所以我按如下方式记录了输出:
<xsl:template match="tr">
<fo:table-row">
<xsl:if test="count(descendant::table) = 0">
<xsl:attribute name="keep-together">
<xsl:value-of select="always"/>
</xsl:attribute>
</xsl:if>
<xsl:message>
keep-together = <xsl:value-of select="./@keep-together"/>
</xsl:message>
对于doc中的每一行,FOP日志记录显示:
keep-together =
所以,我试过了:
<xsl:template match="tr">
<fo:table-row keep-together="always">
<xsl:message>
keep-together = <xsl:value-of select="./@keep-together"/>
</xsl:message>
这会使嵌套表的输出乱七八糟,但在每个表行的日志记录中,它仍然说:
keep-together =
那么,如何在新创建的FO输出节点上获取新创建的属性的值?
答案 0 :(得分:1)
您可以在输入文档中选择节点,而不是在结果文档中选择节点。如果将临时结果存储在变量中,然后使用XSLT 2或3,您也可以直接选择变量中的节点,或者使用XSLT 1首先需要在变量上使用exsl:node-set
之类的扩展函数将其转换为一个节点集,并能够在其上应用XPath。
<xsl:template match="tr">
<xsl:variable name="row">
<fo:table-row>
<xsl:if test="descendant::table">
<xsl:attribute name="keep-together">always</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</fo:table-row>
</xsl:variable>
<xsl:message select="$row/fo:table-row/@keep-together"/>
<xsl:copy-of select="$row"/>
</xsl:template>