gpt4 book ai didi

marklogic - 转换到 json -- 自定义配置会删除元素吗?没有数组?

转载 作者:行者123 更新时间:2023-12-04 05:01:19 25 4
gpt4 key购买 nike

我有以下xml

<foods
xmlns="http://example.com/agt"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<food id="1" name="celery">
<price>50.2</price>
</food>
<food id="2" name="beets">
<price>23.3</price>
</food>
<food id="3" name="goat cheese">
<price>0.5</price>
</food>
</foods>

使用以下 xsd:
<xs:schema
targetNamespace="http://example.com/agt"
attributeFormDefault="unqualified"
elementFormDefault="unqualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="price" type="xs:decimal"/>
<xs:element name="food">
<xs:complexType>
<xs:sequence>
<xs:element ref="price"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer"/>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="foods">
<xs:complexType>
<xs:sequence>
<xs:element ref="food" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

当我在控制台中执行以下查询时:
xquery version "1.0-ml";
import module namespace json = "http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";
declare namespace agt = "http://example.com/agt";
let $c := json:config("custom")
, $_ := map:put($c,"array-element-names", "food")
return
json:transform-to-json( doc("foods.xml") , $c )

......我明白了:
{"foods":{"food":{"id":3, "name":"goat cheese", "price":0.5}}}

有些东西不适合我。食物元素怎么了?没有数组,只有最后一个进入输出。请注意,取出数组元素名称并不能解决丢失的食物元素。

这是一个错误还是我做错了?我刚开始使用 MarkLogic Server,所以我很可能做错了。任何建议表示赞赏。

最佳答案

您需要指出 food 是一个数组元素。
由于您现在已将食物放在命名空间中,因此您的数组元素名称无法找到它。
您需要使用 xs:QName() 来给出“food”的全名,或者使用以下命令声明配置的默认命名空间

例如这应该有效

  , $_ := map:put($c,"array-element-names", xs:QName("agt:food") )

或者
   , $_ := map:put($c,"element-namespace","http://example.com/agt")

这具有使转换可逆的良好副作用。

关于marklogic - 转换到 json -- 自定义配置会删除元素吗?没有数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16128276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com