在XQuery中构建动态XSLT-使用传递给参数的HTML

时间:2018-12-10 14:02:26

标签: xslt-2.0 xquery-3.0

在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>

1 个答案:

答案 0 :(得分:1)

如果您知道元素名称和名称空间正确(例如,span没有用于HTML 4或HTML5的命名空间,或者span具有用于XHTML的XHTML命名空间)到根本不需要apply-templates的输出,您可以直接使用<xsl:copy-of select="$paramDocdate"/>

但是,如果您使用apply-templates,那么显然您需要确保有一个模板可以完成所需的工作(即复制),因此,您要么找到了为{{1} }在需要的模式下复制或设置通用模板,例如该模式(或带有span的所有模式)的身份转换来执行复制。