xslt-2.0 - 在 XQuery 中构建动态 XSLT - 使用传递给参数的 HTML
问题描述
在 XQuery 3.1 中,我动态地创建了一个 XSLT 2.0 样式表来将tei-xml
文档转换为 HTML。
在 XQuery 中,我创建了一个变量$docdate
来存储 HTML 跨度:
<span><a href="somefoosite.com">2018-12-10</a></span>
然后我将它传递给 XSLT 样式表中的一个参数,然后使用它:
let $stylesheet :=
<xsl:stylesheet>
[....]
<xsl:param name="paramDocdate" as="element()*">{$docdate}</xsl:param>
[....]
<xsl:apply-templates select="$paramDocdate" mode="date"/>
[....]
</xsl:stylesheet>
我不确定xsl:apply-templates
如何让 HTML 呈现为 HTML,而不仅仅是输出 text 2018-12-10
。需要明确的是:HTML 元素肯定是通过参数来的,而不仅仅是text()
.
或者,我想在 XQuery 中创建变量时,可以以某种方式将 HTML 序列化为字符串(作为长字符串传递给参数)?
但我无法弄清楚如何做这两件事。
我宁愿避免在创建时直接将 HTML 手动编写为字符串$docdate
……如果可以以编程方式执行此操作。
提前谢谢了。
编辑:原来这个模板从参数输出HTML,但我有兴趣听到其他方法来解决这个问题......
<xsl:template match="span" mode="date">
<xsl:copy-of select="."/>
</xsl:template>
解决方案
如果您知道您有一个具有正确名称和名称空间的元素(例如span
,对于 HTML 4 或 HTML5 没有名称空间,或者span
对于 XHTML 有 XHTML 名称空间)并且只想将其复制到您根本不需要的输出apply-templates
中,您可以直接使用<xsl:copy-of select="$paramDocdate"/>
。
但是,如果您使用apply-templates
那么显然您需要确保有一个模板可以完成您需要的正确工作(即复制),因此,正如您所发现的那样,span
在想要的模式下设置模板以复制或设置通用模板就像xsl:template mode="#all"
执行复制的那个模式(或所有模式)的身份转换。
推荐阅读
- vue.js - vue中的对象数据属性上是否需要存在所有属性?
- haskell - haskell 如何管理递归函数调用的内存
- python - 通过 python 将销售数据作为 VARCHAR 附加到 MS SQL-Server 表中,只有两位小数
- powerbi - 列匹配条件时如何显示行?
- json - 在服务器上找不到 Wordrpress wp-json -- localhost
- css - 如何自定义角度材料设计 mat-datepicker 图标大小
- python - 为什么更新类属性不会更新类的所有实例?
- python - roslibpy 消息不包含多个键值对
- powershell - 使用 PowerShell 同时覆盖多个 *.txt 文件的全部内容
- webpack - css 加载器不工作 - webpack 无法识别 css 类型文件