如何查询现有 XSLT-FO 输出节点上的属性
How to query an attribute on an existing XSLT-FO output node
我正在尝试从 HTML 创建 PDF。我想将内容放在不包含子 table 的行上。我找到了适当的行,但没有任何反应,所以我记录了如下输出:
<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>
对于文档中的每一行,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>
这使得带有嵌套 table 的输出变得混乱,但在每个 table 行的日志记录中它仍然说:
keep-together =
那么,如何在新建的FO输出节点上获取新建属性的值呢?
您可以 select 输入文档中的节点,而不是结果文档中的节点。如果您将临时结果存储在一个变量中,那么使用 XSLT 2 或 3 您还可以直接 select 变量中的节点,或者使用 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>
我正在尝试从 HTML 创建 PDF。我想将内容放在不包含子 table 的行上。我找到了适当的行,但没有任何反应,所以我记录了如下输出:
<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>
对于文档中的每一行,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>
这使得带有嵌套 table 的输出变得混乱,但在每个 table 行的日志记录中它仍然说:
keep-together =
那么,如何在新建的FO输出节点上获取新建属性的值呢?
您可以 select 输入文档中的节点,而不是结果文档中的节点。如果您将临时结果存储在一个变量中,那么使用 XSLT 2 或 3 您还可以直接 select 变量中的节点,或者使用 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>