我有一个带有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,但没有用户输入数据,只有节点......)
真的需要解决这个问题......
再次感谢!
答案 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以使用磁盘上的其他目录来做更多奇特的事情。