xml - XSLT 希望删除属性然后重新匹配元素
问题描述
因此,我正在使用 RenderX 处理 XSLT 样式表来生成 pdf 作为输出。
目前,我正在尝试找到一种方法,在元素具有特定属性时将一些简单的样式应用于元素,然后也想匹配它们的常规模板。我试图利用 xsl:copy,但我没有设法让它工作,我不确定是否有可能实现我想做的事情
<xsl:template match="node()[@ns:change='del' and not(@ns:changed='true')]" mode="#all" priority="1">
<fo:inline text-decoration="line-through" color="#FF0000">
<xsl:copy>
<xsl:attribute name="ns:changed">true</xsl:attribute>
<xsl:apply-templates select="." mode="#current"/>
</xsl:copy>
</fo:inline>
</xsl:template>
本质上,我希望模板第一次匹配到它通过删除线并涂成红色,然后它能够匹配所有常规样式和格式。
我一直在尝试制作一个包罗万象的解决方案,因为我们有 100 个使用不同模式的模板,所以我能想到的另一个解决方案是检查每个单独的模板的属性,但我希望尽可能避免这种情况。
目前我遇到了它变得递归的问题(即属性未设置)或优先级= 1的模板根本不匹配。
解决方案
使用xsl:next-match
(参见https://www.w3.org/TR/xslt20/#element-next-match)恢复常规处理:
<xsl:template match="node()[@ns:change='del' and not(@ns:changed='true')]"
mode="#all" priority="1">
<fo:inline text-decoration="line-through" color="#FF0000">
<xsl:next-match />
</fo:inline>
</xsl:template>
如果环绕fo:inline
常规格式还不够,您可以在 上设置参数xsl:next-match
,然后使用常规模板中的参数值做正确的事情。
推荐阅读
- java - 我该如何解决 - 无法下载 mysql 连接器 .jar... 收到致命警报:protocol_version?
- javascript - 如何等待异步函数导致nodejs
- api-platform.com - 如何使 API-Platform Admin 仅对管理员用户可用?
- c# - 当 RowHeadersVisible = false 时,Datagrid 中的 Visual DataGridBoolColumn 错误
- java - 每次在方法中运行新值
- vue.js - 无法在 vue.js v3 上导入包 aws-sdk
- .net-core - 从类库引用的 DLL 未复制到输出目录
- django - 如何在 Windows 上使用指定端口在 Heroku 上部署的 Django 应用程序上运行女服务员
- matlab - 如何在 fsolve 中修复解向量的分量?
- outlook-addin - 加载项内的 SSO 身份验证