在 XQuery 中构建动态 XSLT - 使用 HTML 传递到参数中
building dynamic XSLT in XQuery - using HTML passed into parameter
在 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,而不仅仅是输出文本 2018-12-10
。需要明确的是:HTML 元素肯定是通过参数来的,而不仅仅是 text()
.
或者,我想人们可以在 XQuery 中创建变量时以某种方式将 HTML 序列化为字符串(以将长字符串传递给参数)?
但我不知道如何做这两件事。
我宁愿避免在创建 $docdate
时直接将 HTML 手动写入字符串...如果可以通过编程方式执行此操作。
非常感谢。
编辑:原来下面这个模板从参数中输出 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"
的所有模式)的身份转换。
在 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,而不仅仅是输出文本 2018-12-10
。需要明确的是:HTML 元素肯定是通过参数来的,而不仅仅是 text()
.
或者,我想人们可以在 XQuery 中创建变量时以某种方式将 HTML 序列化为字符串(以将长字符串传递给参数)?
但我不知道如何做这两件事。
我宁愿避免在创建 $docdate
时直接将 HTML 手动写入字符串...如果可以通过编程方式执行此操作。
非常感谢。
编辑:原来下面这个模板从参数中输出 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"
的所有模式)的身份转换。