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

MarkLogic : Array specification in XML to JSON conversion

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

提前致谢!

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

大多数标准模式不会重用具有不同结构的相同 QName——这是可能的,但并不常见——如果你可以在所有情况下简单地使用 "CustomerInfo" 而不管文档中的路径,那么你好,就"CustomerInfo".

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