我有一个链式XSLT 2.0转换场景(使用saxon),如下所示:
- I1.xml是T1.xslt的输入,样式表将构建T2.xslt
- 输入I2.xml为T2.xslt,stylesheet将输出O1.xml
我想有一个xsl:function(这样它将在XPath表达式中可用),让我们称之为:f(dataNode,queryString),它将使用提供的查询查询dataNode,类似于下面的内容: BR />
<xsl:function name="my:f">
<xsl:param name="dataNode" as="item()*"/>
<xsl:param name="query" as="xsd:string"/>
<xsl:sequence select="$dataNode/$query"/>
</xsl:function>
my:f()存储在一个单独的文件中,仅由T2包含。
my:f()在文件中被隔离,因为根据配置,它可能会调用扩展函数来执行查询
my:f()调用当然是T1中的“build”(XPath queryString是动态连接的),但它实际上只在T2中调用。
我似乎唯一的问题是如何实际将动态构建的queryString从T1传递到T2,然后传递给my:f()作为一个简单的字符串(因为实际的查询将由my执行:f ())。
有没有人有关于如何处理此问题的任何想法(以及理想情况下的一些代码)?
此致
答案 0 :(得分:1)
如果您想在运行时构造和评估XPath表达式,那么您需要使用http://www.saxonica.com/documentation/extensions/functions/evaluate.xml之类的扩展函数:<xsl:sequence select="saxon:evaluate(concat('$p1/', $query), $dataNode)"/>