2012-06-04 97 views
0

我想使用xslt轉換xml,但重要的變量來自請求。 我有這樣的XQuery:將參數從xquery傳遞到xslt

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> 

我想TU添加屬性 '選擇' 到:

<xsl:param name="topicid"/> 

與在xquery中指定$ topid值。

我在這裏看到類似於java的東西:http://www.techrepublic.com/article/pass-parameters-to-xsl-templates-programmatically/1044596 但在xquery中它不想工作。

我使用存在分貝1.4.1

編輯:

轉換:轉換爲http://exist-db.org/xquery/transform命名空間

正式文件是在這裏:https://en.wikibooks.org/wiki/XQuery/XQuery_and_XSLT

+1

transform:transform不是標準的XQuery功能,它是由您使用的XQuery實現提供的擴展。所以這將有助於告訴人們這是什麼實施。 –

+0

namespace transform:transform來自http://exist-db.org/xquery/transform模塊官方文檔鏈接在這裏:https://en.wikibooks.org/wiki/XQuery/XQuery_and_XSLT – damik

回答

0

我不熟悉這個API,但我不知道你從哪裏得到這個主意:

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

我的文檔閱讀是如果樣式表有一個參數命名topicid,那麼我希望查詢通過類似

<param name="topicid" value="{$topid}"/> 
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,例如用於測試目的...)