0

我想使用 xslt 转换 xml,但重要的变量来自请求。我有这样的xquery:

let $transform := doc("projekt.xsl")
let $serialization-options := 'method=xml media-type=text/xml omit-xml-declaration=yes indent=no'
let $params := 
<parameters>
    <param name="output.omit-xml-declaration" value="yes"/>
    <param name="output.indent" value="yes"/>
    <param name="output.media-type" value="text/html"/>
    <param name="output.method" value="xhtml"/>
    <param name="param.name" value="topicid" />
    <param name="param.select" value="{$topid}"/>
</parameters>

return 
    transform:transform($doc, $transform, $params, $serialization-options)

文件 project.xsl 在这里:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="topicid"/>

<xsl:template match="/">
    <xsl:value-of select="$topicid"/>
    <xsl:apply-templates select="discussflow/message[@topic=$topicid]"/>
</xsl:template>

<xsl:template name="msg" match="//message">
    ..........
</xsl:template>

我想你添加属性'select'到:

<xsl:param name="topicid"/> 

在 xquery 中指定了 $topid 值。

我在这里看到了类似的东西:http ://www.techrepublic.com/article/pass-parameters-to-xsl-templates-programmatically/1044596 但在 xquery 中它不需要工作。

我使用存在数据库 1.4.1

编辑:

transform:transform 来自http://exist-db.org/xquery/transform命名空间

官方文档在这里:https ://en.wikibooks.org/wiki/XQuery/XQuery_and_XSLT

4

2 回答 2

1

在您的 xslt 文档中,您需要使用:

<xsl:param name="param.select" select="default value" />
<xsl:param name="output.omit-xml-declaration" select="default value""/>
<xsl:param name="output.indent" select="default value"/>
<xsl:param name="output.media-type" select="default value"/>
<xsl:param name="output.method" select="default value"/>
<xsl:param name="param.name" select="default value" />
<xsl:param name="param.select" select="default value"/>

也就是说,参数的名称必须与 xquery 中定义的名称相同。如果没有这样的参数,您可以使用 select 输入默认值(或者您在没有请求的情况下运行 xslt,例如用于测试目的......)

于 2012-09-16T15:11:02.233 回答
0

我不熟悉这个 API,但我不知道你从哪里得到这个想法:

<param name="param.name" value="topicid" />
<param name="param.select" value="{$topid}"/>

我对文档的阅读是,如果样式表有一个名为 topicid 的参数,那么我希望查询传递类似

<param name="topicid" value="{$topid}"/>
于 2012-06-11T13:55:26.843 回答