Существует ли в Marklogic простой XQuery, который выдает вывод JSON из простой последовательности XML для использования с автоконкурентом JQuery? - PullRequest
3 голосов
/ 02 апреля 2011

Я пытаюсь получить виджет 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

Ответы [ 2 ]

4 голосов
/ 02 апреля 2011

Как насчет:

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;

3 голосов
/ 17 апреля 2011

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

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

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

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

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

...