我试图将此XML文件转换为JSON但无法取得任何成功.我的XML中有两个子元素,但它只返回最后一个.如何以JSON格式获取两个记录?
XML
<Carousel>
<Video>
<Title>1</Title>
<Abstract>3</Abstract>
<FileName type="custom" mediatype="image">D</FileName>
<HasAccess>4</HasAccess>
</Video>
<Video>
<Title>1</Title>
<Abstract>2</Abstract>
<FileName type="custom" mediatype="image">D</FileName>
<HasAccess>3</HasAccess>
</Video>
</Carousel>
Run Code Online (Sandbox Code Playgroud)
XQUERY:
import module namespace json = "http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";
let $custom := let $config := json:config("custom")
return
(
map:put( $config, "whitespace", "ignore" ),
$config
)
let $XML := $XMLFile (: XML content :)
return json:transform-to-json($XML,$custom)
Run Code Online (Sandbox Code Playgroud)
当前输出:
{"Carousel":{"Video":{"Title":"1", "Abstract":"2", "FileName":{"type":"custom", "mediatype":"image", "_value":"D"}, "HasAccess":"3"}}}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用默认的"基本"JSON设置,json:transform-to-json($XML)
但得到了错误
XML Element not in expected namespace [http://marklogic.com/xdmp/json/basic] (json:INVALIDELEM): Carousel
Run Code Online (Sandbox Code Playgroud)
它仅在"完全"模式下工作,但它正在添加一些JSON格式的额外信息,如_attribute等,这在我的输出JSON中是不需要的.
请帮助我或者说明为什么它没有以JSON格式返回完整的输出.
您需要将重复元素标记为初学者的数组元素.这似乎有效:
xquery version "1.0-ml";
import module namespace json = "http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";
let $xml := <Carousel>
<Video>
<Title>1</Title>
<Abstract>3</Abstract>
<FileName type="custom" mediatype="image">D</FileName>
<HasAccess>4</HasAccess>
</Video>
<Video>
<Title>1</Title>
<Abstract>2</Abstract>
<FileName type="custom" mediatype="image">D</FileName>
<HasAccess>3</HasAccess>
</Video>
</Carousel>
let $custom :=
let $config := json:config("custom")
let $_ := map:put( $config, "whitespace", "ignore" )
let $_ := map:put( $config, "array-element-names", "Video" )
return $config
return json:transform-to-json($xml,$custom)
Run Code Online (Sandbox Code Playgroud)
如果您愿意,也可以抑制属性.配置支持各种选项,我建议查看其文档:
http://docs.marklogic.com/json:config
HTH!
归档时间: |
|
查看次数: |
1703 次 |
最近记录: |