3

MarklogicXMLサーバーに格納されているXMLソースからデータを取得する ためにjQueryオートコンプリートウィジェットを取得しようとしています。

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

XQuery用の他のjSonシリアライザーを試しました

また、どちらも、jQueryのオートコンプリートウィジェットが使用する単純な配列ではなく、非常に複雑なjson構造を返すという問題があります。誰かが何かを提案できますか?

https://github.com/isubiker/mljson

4

2 に答える 2

4

どうですか:

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;

于 2011-04-02T18:58:53.203 に答える
3

あなたが解決策を見つけたのは良いことですが、必要に応じてmljsonライブラリを使用できるようにするいくつかの追加情報を渡すと思いました。

mljsonライブラリの主な目的は、MarkLogicをJSONを介して保存および検索するためのサーバーに変えることです。そうは言っても、XQueryを介してJSONを生成するために使用できます。ただし、ライブラリはライブラリ自体が生成する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ライブラリ(コモンズの下にあるもの)に関しては、それはそれほど柔軟ではなく、あなたのニーズにも適合しません(それはその入力フォーマットでもう少し寛容ですが)。

于 2011-04-17T07:08:06.893 に答える