Как передать элемент 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);
});
});
Примечание:
- Это простой пример сценария. Поэтому, пожалуйста, измените это для вашей ситуации.
Рекомендации:
Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, прошу прощения.