Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MarkLogic json:从具有多个名称空间的json转换?_Json_Xquery_Marklogic - Fatal编程技术网

MarkLogic json:从具有多个名称空间的json转换?

MarkLogic json:从具有多个名称空间的json转换?,json,xquery,marklogic,Json,Xquery,Marklogic,在MarkLogic中,是否可以使用json:transformfromJSON将json转换为具有多个名称空间的XML?例如,如何转换 { options: { format: "xml" } } 进入 xml 是的,你可以,它没有文档记录,也不容易,但它不是秘密。 查看Modules/MarkLogic/json/custom.xqy中的源代码 有更多的自定义参数,然后被记录。“有趣的”方法允许您重写用于转换的各个方法。 示例:使用自定义策略时,可以设置覆盖。 以下是默认

在MarkLogic中,是否可以使用json:transformfromJSON将json转换为具有多个名称空间的XML?例如,如何转换

{
  options: {
    format: "xml"
  }
}
进入


xml

是的,你可以,它没有文档记录,也不容易,但它不是秘密。 查看Modules/MarkLogic/json/custom.xqy中的源代码

有更多的自定义参数,然后被记录。“有趣的”方法允许您重写用于转换的各个方法。 示例:使用自定义策略时,可以设置覆盖。 以下是默认值,您可以更改它们

map:put($c , $json-custom:element-qname-from-json-name  , json-custom:element-qname-from-json-name#2 ),
map:put($c , $json-custom:attribute-qname-from-json-name  , json-custom:attribute-qname-from-json-name#2 ),
将函数“json custom:element qname from json name”替换为您自己的函数——您可以使用任意逻辑,给定配置对象和当前json字段名,返回完整的qname

您可以从上述文件中提取的“内置”函数(未被禁止)。从9.0版开始,这看起来像:

declare %private function json-custom:element-qname-from-json-name( $config as map:map , $json_name as xs:string? ) as xs:QName
{

   json-custom:qname( map:get( $config , $json-custom:element-namespace ) ,
                      map:get( $config , $json-custom:element-namespace-prefix ) ,
                      if(map:get($config , $json-custom:camel-case)) then  json-custom:from-camelCase($json_name) else $

 };
这可能会变得非常棘手。我建议结合使用自定义转换和xml后处理(使用xquery或xslt)

棘手的是,从JSON转换为XML时,您不会获得太多的“上下文”。 JSON没有节点祖先或排序。您得到的只是一个字段名。如果您可以从中映射到所需的QName,那么就很容易了。例如,您可以创建json名称到QNames的映射,并将其与自定义函数一起放入配置中


通常需求更加困难,因此建议您尝试“接近”配置,然后进行后期处理

示例JSON中没有任何内容表明应将这些名称空间应用于XML元素

如果使用,结果XML将出现在
http://marklogic.com/xdmp/json/basic
名称空间

<json type="object" xmlns="http://marklogic.com/xdmp/json/basic">
  <options type="object">
    <format type="string">xml</format>
  </options>
</json>
但是,如果您试图构造XML以便为生成选项,您可能会发现使用
map:map
而不是XML表单来指定选项更容易

用于自定义此操作的选项。您可以将选项指定为“xdmp:document get”命名空间中的XML元素,或者指定为
map:map
。下面的选项名称是XML元素localnames。使用贴图时,请将连字符替换为驼色大小写。例如,“选项”在用作map:map键时变为“选项”

如果有JSON对象,可以选择
options
属性,然后使用
fn:data()
或将
options
对象节点原子化为映射:

fn:data($json//options)

非常感谢。感谢您对MarkLogic内部的宝贵见解。感谢您对使用map:map的建议。这确实是一条容易得多的路线。
fn:data($json//options)