如何使用 XMLService 将两个命名空间添加到一个元素?

How to add two Namespaces to an Element using XMLService?

我需要使用 XMLService 创建一个 XML 元素:

<serv:message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xmlns:serv="http://www.webex.com/schemas/2002/06/service">

我知道我可以使用以下 Google Apps 脚本代码添加一个命名空间,但如何添加两个命名空间?

  var ns = XmlService.getNamespace("serv", "http://www.webex.com/schemas/2002/06/service");
  var root = XmlService.createElement("message", ns);
  root.setNamespace(ns);

恐怕您不能在当前 XmlServices 的同一元素中声明多个命名空间。我们希望 Google 将来可以实现类似的 addNamespace 方法,但事实并非如此。您只能为每个元素声明一个命名空间。根据 W3schools XML Namespaces code.

的示例代码
<root>

<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table xmlns:f="http://www.w3schools.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

创建 XML:

function createXml() {
  var nsh = XmlService.getNamespace('h', 'http://www.w3.org/TR/html4/');
  var nsf = XmlService.getNamespace('f', 'http://www.w3schools.com/furniture');

  var root = XmlService.createElement('root');
  var document = XmlService.createDocument(root);

  var child1 = XmlService.createElement('table').setNamespace(nsh);
  var tr = XmlService.createElement('tr').setNamespace(nsh);
  var td1 = XmlService.createElement('td').setNamespace(nsh).setText('Apples');
  var td2 = XmlService.createElement('td').setNamespace(nsh).setText('Bananas');
  tr.addContent(td1).addContent(td2);
  child1.addContent(tr);
  root.addContent(child1);

  var child2 = XmlService.createElement('table').setNamespace(nsf);
  var property1 = XmlService.createElement('name').setNamespace(nsf).setText('Affrican Coffee Table');
  var property2 = XmlService.createElement('width').setNamespace(nsf).setText('80');
  var property3 = XmlService.createElement('length').setNamespace(nsf).setText('120');
  child2.addContent(property1).addContent(property2).addContent(property3);
  root.addContent(child2);

  var xml = XmlService.getPrettyFormat().format(document);
 }

如果有人仍然面临这个问题,您可以使用本例中的解析方法,我设置了两个命名空间 atom 和 gd:

var document = XmlService.parse("<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'></atom:entry>");

根据 KLiFF 的建议,它是这样的。

function createSepaXML() {
    var painNamespace = XmlService.parse("<Document xmlns='urn:iso:std:iso:20022:tech:xsd:pain.008.001.02' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'></Document>");
    var root = painNamespace.getRootElement();
    var CstmrDrctDbtInitn = XmlService.createElement('CstmrDrctDbtInitn');
    root.addContent(CstmrDrctDbtInitn);
    var xml = XmlService.getPrettyFormat().format(root);
    Logger.log(xml);