1

xmlドキュメントを含むデータベースがあり、送信が送信されたときにxformsページに変換されたxmlを表示したいと思います(orbeonフォームを使用しています)。

私の解決策は、送信時にサーブレットがデータベースからxmlを取得してファイルに書き込み、xsltがxmlツリーを変換することです(いつどのように変換を行う必要がありますか?)が、表示方法がわかりませんxformsページのこのファイル。のreplace="instance"属性が役立つかもしれませんが、方法がわかりません。

ありがとう!

さて、アレッサンドロのアドバイスの後、私はこのxplのものを使おうとしていますが、うまくいきません。モデル内:

<xforms:insert nodeset="instance('inst2')"
origin="xxforms:call-xpl('oxf:/resources/pipeline.xpl', 'data', 
instance('inst1'), 'data')"/>    

pipe.xpl内:

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"
      xmlns:oxf="http://www.orbeon.com/oxf/processors">

<p:param type="input" name="data"/>
<p:param type="output" name="data"/>

<p:processor name="oxf:xslt">
    <p:input name="data" href="#data"/>
    <p:input name="config" href="transform.xsl"/>
    <p:output name="data" ref="data"/>
</p:processor>

私が変換したいインスタンスは「complaint-instance」であり、変換されたインスタンスは「trf-instance」と呼ばれ、pipeline.xplファイルは私のxformsページと同じディレクトリにあります。私のstyesheetはcustomerToOperator.xslと呼ばれています。私のコードの何が問題になっていますか?

「別々のデプロイメントを使用している場合、サービスとXSLT変換は、アプリケーション内ではなく、OrbeonWARファイルに存在する必要があります。」というメモに気づきました。えーと…これらのファイルはどこに置けばいいの?

私のアプリの詳細:

a)2つのインスタンスを持つxformsページ:

<instance id='inst1'>
<name>
   <lastname/>
   <firstname/>
</name>  
</instance>

<instance id='inst2'>
<fname>
   <fullname/>
</fname>
</instance>

name/lastnameとname/firstnameで参照される2つの入力フィールドを取得しました。上記のxforms:insertノードとxforms:submissionノードがあります。

<xforms:submission 
id="save-submission" 
ref="instance('inst2')"
action="/my-servlet"
method="post"
replace="none">

orbeon / WEB-INF / resourcesに2つのファイル、pipeline.xpl(上記)とtransform.xslを追加しました。

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
          <fname>
              <fullname>
                 <xsl:value-of select="name/firstname"/>
                 <xsl:value-of select="name/lastname"/>
              </fullname>
          </fname>
</xsl:template>
</xsl:stylesheet>

そして、投稿されたインスタンスをコンソールに書き込むサーブレットがあります(現在、コンソールにinst2を書き込みますが、ユーザー入力データはなく、ノードのみです...)

本当にこれを修正する必要があります...

再度、感謝します!

4

1 に答える 1

0

データベース (リレーショナルかどうかに関係なく) から XML を取得して変換を適用するには、独自のサーブレットを作成する代わりに、XPL パイプラインを使用し、ページ フローを介してこのパイプラインを URL にマップします。これで、HTTP 要求に応答して XML を返すサービスができました。XForms からサービスを呼び出すには、<xforms:submission replace="instance">. 最終的にインスタンス内の XML になり、次のように表示できます<xforms:output value="saxon:serialize(instance(), 'xml')"/>

いずれの場合も (個別のデプロイを含む)、パイプラインと XSLT ファイルは「リソース」にある必要があります。通常、これはWEB-INF/resourcesOrbeon の Web アプリの を意味します。ただし、ディスク上の他のディレクトリも使用するように Orbeonリソース マネージャーを設定することで、より凝った処理を行うこともできます。

于 2011-04-07T06:21:52.793 に答える