Как передать элемент XML нескольким родительским узлам XML? - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь создать три файла 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 Ответ

0 голосов
/ 01 июля 2019
  • Вы хотите создать несколько 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);
  });
});

Примечание:

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

Ссылки:

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

...