如何从marklogic中的xml文档获取json结果
我试图使用2层服务器端
JavaScript应用程序返回JSON格式的XML文档.我知道MarkLogic可以使用REST api在JSON和XML格式之间轻松切换.
但是,以下返回xml: cts.search('something',['format-xml']) // options may be omitted 但这没有任何回报: cts.search('something',['format-json']) 根据文档,我认为我已正确使用该功能. 这可能使用服务器端javascript吗? 更新: 使用transformToJsonObject如下: var json = require('/MarkLogic/json/json.xqy'); var doc = fn.doc('/content/rss/72eb9bf835521446be8d2176e1ac9d22.xml') var jsonDoc = json.transformToJsonObject(doc,json.config('custom')); jsonDoc 我收到以下错误: 500 Internal Server Error XDMP-STACKOVERFLOW: Stack overflow in /MarkLogic/json/custom.xqy,at 493:23,in json-custom:is-ignore-attribute#2(json:object(<json:object xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:json="http://marklogic.com/xdmp/json"><json:entry key="element-qname-from-json-name"><json:value xsi:t...</json:object>...XDMP-ATOMIZEFUNC: (err:FOTY0013) Functions cannot be atomized...),fn:doc("/content/rss/72eb9bf835521446be8d2176e1ac9d22.xml")/newsitem/article/*:html/*:head/*:script[5]/*:script/*:script/*:script/*:link/*:script/*:script/*:script/*:script/*:script/*:script/*:style/*:script/*:script/*:script/*:script/*:script/*:script/*:script/*:script/*:script/*:script/*:link/*:script/*:script/*:noscript/*:link/*:meta/*:body/*:div/*:div/*:div/*:script/*:div/*:div/*:script/*:script/*:div/*:div/*:script/*:script/*:script/*:script/*:noscript/*:p/*:header/*:div/*:div/*:div/*:a/*:section/*:div/*:h2/*:ul/*:li/*:a/*:li/*:a/*:div/*:div/*:a/*:img/*:span/*:script/*:nav/*:div/*:h2/*:ul/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:li/*:a/*:span/*:div/*:a/*:form/*:div/*:label/*:div/*:script/*:div/*:div/*:div/*:div/*:div/*:a/*:svg/*:title/*:h2/*:a/*:div/*:button/*:div/*:ul/*:li/*:a/*:span/*:li/*:a/*:span/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:div/*:nav/*:a/*:span/*:span/*:ul/*:li/*:a/*:span/*:li/*:a/*:span/*:span/*:div/*:div/*:script/*:script/*:div/*:div/*:span/*:span/*:a/*:div/*:div/*:script/*:script/*:div/*:div/*:div/*:span/*:span/*:a/*:div/*:div/*:script/*:script/*:div/*:div/*:div/*:div/*:h1/*:div/*:ul/*:li/*:div/*:li/*:span/*:a/*:div/*:figure/*:span/*:img/*:span/*:span/*:figcaption/*:span/*:span/*:p/*:p/*:p/*:p/*:p/*:div/*:div/*:script/*:script/*:h2/*:p/*:p/*:figure/*:span/*:div/*:span/*:span/*:figcaption/*:span/*:span/*:p/*:p/*:p/*:p/*:p/*:p/*:p/*:p/*:div/*:a/*:h2/*:a/*:ul/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:li/*:a/*:span/*:div/*:div/*:div/*:h2/*:div/*:ul/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:li/*:a/*:div/*:div/*:div/*:span/*:div/*:div/*:div/*:div/*:div/*:h2/*:div/*:ul/*:li/*:div/*:div/*:a/*:div/*:span/*:p/*:div/*:div/*:div/*:div/*:script/*:script/*:div/*:div/*:script/*:script/*:div/*:div/*:script/*:script/*:div/*:div/*:h2/*:a/*:strong/*:p/*:div/*:a/*:strong/*:div/*:a/*:strong/*:div/*:div/*:div/*:script/*:script/*:div/*:div/*:h2/*:div/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:h3/*:p/*:div/*:a/*:div/*:div/*:div/*:div/*:div/*:span/*:span/*:span/*:h3/@class) [1.0-ml] $config = json:object(<json:object xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:json="http://marklogic.com/xdmp/json"><json:entry key="element-qname-from-json-name"><json:value xsi:t...</json:object>...XDMP-ATOMIZEFUNC: (err:FOTY0013) Functions cannot be atomized...) $a = fn:doc("/content/rss/72eb9bf835521446be8d2176e1ac9d22.xml")/newsitem/article/*:html/*:head/*:script[5]/*:script/*:script/*:script/*:link/*:script/*:script/*:script/*:script/*:script/*:script/*:style/*:script/*:script/*:script/*:script/*:scr 解决方法
cts.search()的format-xml和format-json选项按这些格式过滤搜索结果;他们不做任何改造(见
cts.search() options documentation).
有许多方法可以使用MarkLogic将XML转换为JSON;最简单的可能是 var json = require('/MarkLogic/json/json.xqy'); var doc = cts.doc('/triplestore/97a5ab126bddeea0.xml'); var jsonDoc = json.transformToJsonObject(doc,json.config('custom')); 您可以使用 cts.search()返回一个迭代器,因此你需要一个for-of循环(或某种累加器函数)来获取实际的XML文档,然后你可以转换它们. 更新: 该错误可能是JSON库中的错误,但这是一个非常深的HTML路径;我认为将HTML元素转换为JSON对象属性并不重要.相反,我们将序列化HTML,并将字符串添加回我们的JSON对象. 这是搜索结果的示例转换;展示如何展开Iterator,自定义JSON转换,序列化XHTML内容以在JSON中使用,等等. 笔记: >这使用fn.subsequence将Iterator限制为前10个结果. 这是组合的例子;你可以在MarkLogic QConsole中运行它: var json = require('/MarkLogic/json/json.xqy'); var conf = json.config('custom'); var htmlNs = 'http://www.w3.org/1999/xhtml'; // exclude <html:html/> elements // Note: this is a little awkward because the JSON library is XQuery // and requires an XDM sequence,not an Array conf['ignore-element-names'] = json.arrayValues([ fn.QName(htmlNs,'html') ]); var results = fn.subsequence( cts.search(cts.andQuery(null),'format-xml'),1,10 ); var transformedResults = []; var transformed = []; for (var result of results) { // transformToJson() returns an object-node() wrapped in a document-node() // convert it to a regular JS object transformed = json.transformToJson(result,conf).toObject() transformed.escapedContent = xdmp.quote( result.xpath('.//html:html',{ html: htmlNs}) ); transformedResults.push(transformed); } transformedResults (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |