MarkLogic: спецификация массива в преобразовании XML в JSON - PullRequest
0 голосов
/ 01 мая 2019

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 Ответ

1 голос
/ 01 мая 2019

Использование "\" как части имени не делает то, что вы думаете.Он буквально использует "\" как часть имени, а НЕ как спецификацию пути.Если ваша xml / схема использует одно и то же QName в разных местах документа, которые вы не хотите обрабатывать одинаково, это не сработает для вас (нет эквивалентного параметра для указания path для именидля специального использования).

Большинство стандартных схем не используют одно и то же QName с другой структурой - это возможно, но это не распространено - если вы можете обойтись без использования просто CustomerInfo во всех случаях независимо от путив документе, тогда ваше дело, просто «CustomerInfo».

Если вам нужно по-разному относиться к разным путям в вашем документе, я бы сделал сначала предварительную обработку документа до промежуточной формы, заменяя все «специальные».'элементы с уникальными именами, то вы можете запустить запустить преобразование на промежуточный документ.Если вы решите использовать то же базовое имя, но другое пространство имен, то результирующий вывод JSON (который по умолчанию отбрасывает пространство имен) будет идентичным и не нуждается в дальнейшей обработке.

...