MarkLogic:XML到JSON转换中的数组规范

时间:2019-05-01 04:25:39

标签: marklogic marklogic-9 marklogic-dhf

MarkLogic版本:9.0-6.2

我们有一个XML文档,其中元素'CustomerInfo'出现在多个位置。根据架构定义,此元素在一个位置是一个数组(maxOccurs =“ unbounded”),在所有其他位置是一个常规元素。

我正在尝试使用自定义配置将XML转换为JSON,并提供确切的路径,将“ CustomerInfo”元素转换为数组。

下面是示例数据...

<instance>
  <tns:CustomerDownload xmlns:tns="http://new.webservice.namespace" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <tns:CustomerDownloadInfo>
      <tns:CustomerInfo>
        ...
        ...

下面是代码...

const JsonConfig = json.config('custom');
JsonConfig['array-element-names'] = 
    ['\instance\CustomerDownload\CustomerDownloadInfo\CustomerInfo']

此代码未将元素转换为数组。如果我仅按如下所示提供元素名称,那么我会看到它已转换为数组。

JsonConfig['array-element-names'] =['CustomerInfo']

我还尝试了以下QName,但仍未转换为数组。

JsonConfig['array-element-names'] = 
  [xs.QName('\instance\CustomerDownload\CustomerDownloadInfo\CustomerInfo')]

如何在JsonConfig ['array-element-names']中指定确切路径,以便可以显式控制要转换为数组的元素?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用“ \”作为名称的一部分并不符合您的想法。它实际上使用“ \”作为名称的一部分,而不是路径规范。 如果您的xml / schema在文档中的不同位置使用相同的QName而不希望使用相同的QName,那么这将对您不起作用(没有等效的参数用于指定 path 特殊用途的名称。

大多数标准架构不会重复使用具有不同结构的相同QName(可能但不常见),如果您可以在所有情况下都简单地使用“ CustomerInfo”而不管文档中的路径如何,那么您就可以了, “ CustomerInfo”。

如果您必须以不同的方式对待文档中的不同路径,我要做的是首先将文档预处理为中间格式,并用唯一命名的元素替换所有“特殊”元素,然后可以在中间文件。如果您选择使用相同的基本名称但使用不同的名称空间,则结果JSON输出(默认情况下会丢弃该名称空间)将是相同的,无需进一步处理。