Получение и отображение данных из базы данных с xforms при отправке - PullRequest
1 голос
/ 07 апреля 2011

У меня есть база данных с документом xml, и я хочу отобразить преобразованный xml на моей странице xforms, когда отправка отправляется (я использую формы 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>

Мой экземпляр, который я хочу преобразовать, - это "экземпляр жалобы", преобразованный экземпляр называется "trf-экземпляр", файл pipe.xpl находится в том же каталоге, что и моя страница xforms. Моя таблица стилей называется customerToOperator.xsl. Что не так в моем коде?

Я только что заметил примечание: «Если вы используете отдельное развертывание, служба и преобразование XSLT должны присутствовать в файле WAR Orbeon, а не в вашем приложении». Эмм ... Куда мне положить эти файлы?

мое приложение в деталях:

а) Страница xforms, с 2 экземплярами:

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

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

Я получил 2 поля ввода, на которые ссылаются имя / фамилия и имя / имя. У меня есть узел xforms: insert, описанный выше, и узел представления xforms::

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

Я добавил 2 файла в orbeon / WEB-INF / resources, pipe.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 на консоли, но без ввода данных пользователем, только узлы ...)

А действительно нужно это исправить ...

Еще раз спасибо!

1 Ответ

0 голосов
/ 07 апреля 2011

Чтобы получить XML из базы данных (реляционной или нет) и применить преобразование, вместо написания моего собственного сервлета, я бы использовал XPL конвейер и отобразил бы этот конвейер в URL через страницу течь. Теперь у вас есть сервис, который отвечает на HTTP-запрос и возвращает XML. Чтобы вызвать сервис из XForms, вы используете <xforms:submission replace="instance">. В результате вы получаете XML в экземпляре и можете отобразить его примерно так: <xforms:output value="saxon:serialize(instance(), 'xml')"/>.

Во всех случаях (включая отдельное развертывание) конвейер и файл XSLT должны находиться в «ресурсах». Обычно это означает WEB-INF/resources веб-приложения Orbeon. Но вы также можете сделать более причудливые вещи, настроив диспетчер ресурсов Orbeon , чтобы также использовать другие каталоги на диске.

...