在 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" 的所有模式)的身份转换。