3

我正在尝试获取 jQuery自动完成小部件以从存储在 Marklogic XML 服务器中的 XML 源获取数据。

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 序列化程序

并且它们都存在返回非常复杂的 json 结构而不是 jQuery 的自动完成小部件将采用的简单数组的问题。有人可以提出一些建议吗?

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 而构建的,因此需要 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 库(commons 下的那个),它不太灵活,也不适合您的需求(尽管它的输入格式更宽容一些)。

于 2011-04-17T07:08:06.893 回答