gpt4 book ai didi

xslt - 如何重用 xsl-fo block ?

转载 作者:行者123 更新时间:2023-12-05 00:41:53 38 4
gpt4 key购买 nike

我正在维护一个 xsl-fo 文件。我既不擅长 xslt,也不擅长 xsl-fo,我每年只接触一次该文件。

我注意到该文件中有很多重复。例如,我在不同的上下文中有两次(逐字逐字)这个确切的块:

                <xsl:if test="ReleaseNote!=''">
<fo:block background-color="#ffeeee" padding="5mm" font-size="12pt" text-indent="0" border-style="solid" border-width="1px" border-color="red">
<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="20mm" />
<fo:table-column column-width="135mm" />
<fo:table-body>
<fo:table-row>
<fo:table-cell margin="0" padding="0" text-align="justify">
<fo:block text-align="justify">

<fo:external-graphic src="pic/warning.png" content-width="12mm" content-height="12mm" />
</fo:block>
</fo:table-cell>
<fo:table-cell margin="0" padding="0">
<fo:block linefeed-treatment="preserve">
<xsl:value-of select="ReleaseNote" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</xsl:if></fo:block>

如何删除此重复项?我可以预先定义这个块,然后在 xslt 中重新使用它的“引用”吗?

最佳答案

你可以把它放在一个命名模板中。规范相关部分中有关命名模板(尤其是参数)的更多详细信息here .

<xsl:template name="reusable-content">
<xsl:if test="ReleaseNote!=''">
<!--...-->
</xsl:if>
</xsl:template>

然后,在需要内容的地方调用模板:
<xsl:call-template name="reusable-content"/>

命名模板的优点是保留了调用模板的上下文。换句话说,在原始代码中工作的任何 XPath 表达式在从命名模板中执行时也能完美工作。
这仅在代码取决于上下文时才重要,就像您的一样:
<xsl:value-of select="ReleaseNote" />

上面的指令依赖于一个上下文,其中 ReleaseNote可作为子元素使用。

您问题的另一个解决方案是将可重复使用的内容存储在 中。变量 .但是可能存在一些限制,特别是如果您使用 XSLT 1.0(您没有透露您使用的是哪个版本)。

关于xslt - 如何重用 xsl-fo block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22173884/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com