XQuery:从jQueryAjaxPost中的序列创建嵌套xml
我正在使用jQuery序列化网页上某些表单上的数组。该数据将被发回XQuery页面。当我这样做时:XQuery:从jQueryAjaxPost中的序列创建嵌套xml,jquery,xml,ajax,nested,xquery,Jquery,Xml,Ajax,Nested,Xquery,我正在使用jQuery序列化网页上某些表单上的数组。该数据将被发回XQuery页面。当我这样做时: xdmp:get-request-field('data') 我有一系列的事情,比如 data[0][name] data[0][value] data[1][name] data[1][value] 等 它们应该包含如下值: data[0][name] = person.name.first data[0][value] = Fred data[1][name] = person.name.
xdmp:get-request-field('data')
我有一系列的事情,比如
data[0][name]
data[0][value]
data[1][name]
data[1][value]
等
它们应该包含如下值:
data[0][name] = person.name.first
data[0][value] = Fred
data[1][name] = person.name.last
data[1][value] = Jones
data[2][name] = person.books-read.book[0].name
data[2][value] = Moby Dick
data[3][name] = person.books-read.book[0].page-count
data[3][value = 522
data[4][name] = person.books-read.book[0].name
data[4][value] = Bleak House
data[5][name] = person.books-read.book[0].page-count
data[5][value = 757
等
就我的一生而言,我无法找到一种动态的方法来循环所有这些名称/值对,并将它们转换为可用的xml结构
理想情况下,我喜欢这样的东西:
<person>
<name>
<first>Fred</first>
<last>Jones</last>
</name>
<books-read>
<book>
<name>Moby Dick</name>
<page-count>522</page-count>
</book>
<book>
<name>Bleak House</name>
<page-count>757</page-count>
</book>
</books-read>
</person>
建议?思想?有什么要开始的吗
谢谢 您可以使用类似映射的结构来更新现有的XML,但这种方法不适合添加给定文档中不存在的元素,也不适合创建新文档 看起来这些请求参数是从JSON生成的。由于您在问题中使用的是MarkLogic note xdmp:get请求字段,因此可以发送JSON而不是序列化表单,并使用MarkLogic库生成XML:
xquery version "1.0";
import module namespace json = "http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";
declare namespace jsonb = "http://marklogic.com/xdmp/json/basic";
declare variable $input :=
'{ "person": { "name": { "first": "Fred",
"last": "Jones" },
"books-read": [
{ "book": { "name": "Moby Dick",
"page-count": 522 } },
{ "book": { "name": "Bleak House",
"page-count": 757 } }] } }';
declare function local:walk-tree($x)
{
for $y in $x/node()
return local:transform($y)
};
declare function local:transform($x)
{
typeswitch($x)
case element(jsonb:json) return
local:walk-tree($x)
case element() return
element { fn:local-name($x) } {
$x/@* except $x/@type,
local:walk-tree($x)
}
default return $x
};
local:transform( json:transform-from-json($input) )
typeswitch转换去掉MarkLogic JSON库用于指定对象类型的元素和属性