Как передать элемент XML нескольким родительским узлам XML?

Я пытаюсь создать три файла XML одновременно (A,B и C) с общими значениями. К сожалению, когда я пытаюсь назначить группу элементов трем различным родителям, код возвращает неявную ошибку для второго определенного родителя. И я не знаю, как создать "катушечную" копию элемента в скрипте G-приложений.

Я побежал за проблему, создав три раза код, но это задница и действительно непродуктивно...

var XMLrootA = XmlService.createElement('root');
var XMLrootB = XmlService.createElement('root');
var XMLrootC = XmlService.createElement('root');
var XMLsource = XmlService.createElement('source');
  XMLsource.addContent(XmlService.createElement('reference').setText('toto'));
XMLrootA.addContent(XMLSource);
XMLrootB.addContent(XMLSource);
XMLrootC.addContent(XMLSource);

Я ожидаю, что XMLrootB и XMLrootC будут иметь те же значения, что и XMLrootA, но, очевидно, мульти-влияние запрещено.

1 ответ

Решение
  • Вы хотите создать несколько XML-данных, используя копирование элементов.
  • Вы хотите сделать XMLrootA, XMLrootB а также XMLrootC имеют одинаковую структуру с XMLsource,
  • XMLSource из XMLrootA.addContent(XMLSource), XMLrootB.addContent(XMLSource) а также XMLrootC.addContent(XMLSource) то же самое с XMLsource,
    • Это связано с ошибкой, когда вы разместили вопрос.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как один из нескольких ответов.

Точки модификации:

  • В вашей ситуации я использовал cloneContent(),
  • Во-первых, это создает XMLrootA, Затем каждый элемент копируется в XMLrootB а также XMLrootC,

Модифицированный скрипт 1:

Если ваш сценарий изменен, как простая модификация, как насчет следующего измененного сценария?

var XMLrootA = XmlService.createElement('root');
var XMLrootB = XmlService.createElement('root');
var XMLrootC = XmlService.createElement('root');
var XMLsource = XmlService.createElement('source');
XMLsource.addContent(XmlService.createElement('reference').setText('toto'));
XMLrootA.addContent(XMLsource);

// I modified below script.
var copy1 = XMLsource.getParentElement().cloneContent();
for (var i = 0; i < copy1.length; i++) {
  XMLrootB.addContent(copy1[i]);
}

var copy2 = XMLsource.getParentElement().cloneContent();
for (var i = 0; i < copy2.length; i++) {
  XMLrootC.addContent(copy2[i]);
}

Модифицированный скрипт 2:

В этом измененном сценарии метод копирования изменен из приведенного выше сценария.

var XMLrootA = XmlService.createElement('root');
var XMLrootB = XmlService.createElement('root');
var XMLrootC = XmlService.createElement('root');
var XMLsource = XmlService.createElement('source');
XMLsource.addContent(XmlService.createElement('reference').setText('toto'));
XMLrootA.addContent(XMLsource);

// I modified below script.
var root = [XMLrootB, XMLrootC];
root.forEach(function(e) {
  var copy = XMLsource.getParentElement().cloneContent();
  copy.forEach(function(f) {
    e.addContent(f);
  });
});

Примечание:

  • Это простой пример сценария. Поэтому, пожалуйста, измените это для вашей ситуации.

Рекомендации:

Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, прошу прощения.

Другие вопросы по тегам