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"/> 

$topid 値を xquery で指定します。

私はここで Java のようなものを見てきました: 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 doc では、次を使用する必要があります。

<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 で定義されているものと同じでなければなりません。そのようなパラメータがない場合は、選択を使用してデフォルト値を入力できます(または、テスト目的などでリクエストなしで 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 に答える