在提交时使用xforms从数据库获取和显示数据

时间:2011-04-07 05:49:17

标签: xslt xforms orbeon

我有一个带有xml文档的数据库,我想在我的xforms页面上显示一个转换的xml,当发送提交时(我正在使用orbeon表单)。

我的解决方案是,在提交时我的servlet从数据库中获取xml,将其写入文件,xslt转换xml树(何时以及如何进行转换?),但我不知道,如何在xforms页面上显示此文件。也许replace =“instance”属性可以帮助,但我不知道如何。

谢谢!

现在,在亚历山德罗的建议之后,我试图使用这个xpl的东西,但它不起作用。 在模型中:

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

在pipeline.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转换必须存在于Orbeon WAR文件中,而不是在您的应用程序中。” 嗯......我应该把这些文件放在哪里?

我的应用详情:

a)一个xforms页面,有两个实例:

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

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

我有2个输入字段,在name / lastname和name / firstname上引用。 我有一个xforms:insert节点,如上所述,还有一个xforms:submission节点:

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

我在orbeon / WEB-INF / resources,pipeline.xpl,(如上所述)和transform.xsl中添加了2个文件:

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

我有一个servlet,它将发布的实例写在控制台上(现在它在控制台上编写inst2,但没有用户输入数据,只有节点......)

真的需要解决这个问题......

再次感谢!

1 个答案:

答案 0 :(得分:0)

要从数据库(关系或非关系)获取XML并应用转换,而不是编写自己的servlet,我将使用XPL pipeline,并通过页面流将此管道映射到URL。现在,您有一个服务可以回答HTTP请求并返回XML。要从XForms调用服务,请使用<xforms:submission replace="instance">。您最终会在实例中使用XML,并且可以使用以下内容显示它:<xforms:output value="saxon:serialize(instance(), 'xml')"/>

在所有情况下(包括单独部署),管道和XSLT文件必须位于“资源”中。通常,这意味着Orbeon的Web应用程序的WEB-INF/resources。但是你也可以通过设置Orbeon resource manager以使用磁盘上的其他目录来做更多奇特的事情。