如何将XML元素共享到几个XML父节点?

时间:2019-06-30 20:05:43

标签: google-apps-script xmlservice

我正在尝试同时创建三个具有共享值的XML文件(A,B和C)。不幸的是,当我尝试将一组元素分配给三个不同的父对象时,代码在定义的第二个父对象处返回了非显式错误。 而且我不知道如何在G-apps脚本中创建元素的“卷轴”副本。

我通过创建三倍的代码解决了这个问题,但这是一个痛苦的尝试,而且实际上是无用的...

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 :(得分:0)

  • 您要使用复制元素来创建多个xml数据。
  • 您要使XMLrootAXMLrootBXMLrootCXMLsource具有相同的结构。
  • XMLSourceXMLrootA.addContent(XMLSource)XMLrootB.addContent(XMLSource)中的
  • XMLrootC.addContent(XMLSource)XMLsource相同。
    • 这是由于发布问题时抄写不正确。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

修改点:

  • 在您的情况下,我使用了cloneContent()
  • 首先,它创建XMLrootA。然后,将每个元素复制到XMLrootBXMLrootC

修改后的脚本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);
  });
});

注意:

  • 这是一个简单的示例脚本。因此,请根据您的情况进行修改。

参考文献:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。