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

问题描述 投票:0回答:1

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']中指定确切路径,以便我可以显式控制要转换为数组的元素?

提前致谢!

marklogic marklogic-9 marklogic-dhf
1个回答
1
投票

使用“\”作为名称的一部分并不是你想的那样。字面意思是使用“\”作为名称的一部分而不是路径规范。如果您的xml / schema在文档的不同位置使用相同的QName,而您不希望对其进行相同处理,那么这对您不起作用(没有用于指定特殊用途名称的路径的等效参数)。

大多数标准模式不会重复使用具有不同结构的相同QName - 它可能但不常见 - 如果您可以在所有实例中简单地使用“CustomerInfo”而不管文档中的路径那么您的好,只需“CustomerInfo” 。

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

© www.soinside.com 2019 - 2024. All rights reserved.