Есть ли простой XQuery в Marklogic, который создает вывод JSON из простой последовательности XML для использования с автоконкуренцией JQuery?

Я пытаюсь получить виджет jQuery autocomplete для получения данных из источника XML, хранящегося на XML-сервере Marklogic. .

XML-данные очень просто выглядят так:

<id>Bank ATM</id>
<id>PostageShipping</id>
<id>WebHosting</id>
<id>ClientParking</id>

На сервере Markllogic есть функция xdmp:to-json это должно делать что-то подобное, однако при таком использовании

let $ex := fn:collection()//ex:Expense
return xdmp:to-json($ex/ex:id)

Он возвращает вывод, который выглядит так

    ["fn:doc("/expenses/Expenses-Combined.xml")/ex:Expenses/ex:Expense[1]/ex:id",
"fn:doc("/expenses/Expenses-Combined.xml")/ex:Expenses/ex:Expense[2]/ex:id", 
"fn:doc("/expenses/Expenses-Combined.xml")/ex:Expenses/ex:Expense[3]/ex:id", 
"fn:doc("/expenses/Expenses-Combined.xml")/ex:Expenses/ex:Expense[4]/ex:id", 
"fn:doc("/expenses/Expenses-Combined.xml")/ex:Expenses/ex:Expense[5]/ex:id"]

Я попробовал другие сериализаторы jSon для XQuery.

и у них обоих есть проблемы с возвратом очень сложных структур json вместо простого массива, который будет принимать виджет автозаполнения jQuery. Может кто-нибудь что-нибудь подсказать?

https://github.com/isubiker/mljson


person Vlad    schedule 01.04.2011    source источник


Ответы (2)


Как насчет:

xquery version "1.0-ml";

let $ids := 
<ids>
  <id>Bank ATM</id>
  <id>PostageShipping</id>
  <id>WebHosting</id>
  <id>ClientParking</id>
</ids>
return xdmp:to-json(fn:data($ids/id))
==>
["Bank ATM", "PostageShipping", "WebHosting", "ClientParking"]

Вы можете просмотреть свою коллекцию с помощью FLWOR и заменить &lt;ids&gt; в приведенном выше примере на &lt;ex:Expense&gt;.

person wpaven    schedule 02.04.2011

Приятно видеть, что вы нашли решение, но я решил передать некоторую дополнительную информацию, которая позволит вам использовать библиотеку mljson, если хотите.

Основная цель библиотеки mljson — превратить MarkLogic в сервер для хранения и поиска в формате JSON. Тем не менее, его можно использовать для генерации JSON через XQuery. Однако, поскольку библиотека предназначена для использования XML, создаваемого самой библиотекой, она требует, чтобы XML был в определенном формате, чтобы преобразовать его в JSON. Чтобы сгенерировать ваш массив, вот как должен выглядеть XML:

<json type="array">
    <item>Bank ATM</item>
    <item>PostageShipping</item>
    <item>WebHosting</item>
    <item>ClientParking</item>
</json>

Вы просто передадите этот XML в функцию json:xmlToJSON() и получите свой массив JSON.

Что касается другой найденной вами библиотеки JSON (той, что находится под общим доступом), она не такая гибкая и не соответствует вашим потребностям (хотя она немного более снисходительна к формату ввода).

person Ryan Grimm    schedule 17.04.2011