Добавление двух пространств имен в элемент с использованием XMLService в скрипте Google Apps

Мне нужно создать элемент XML следующим образом, используя Google Apps Script XMLService:

<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);

4 ответа

Решение

Боюсь, вы не можете объявить несколько пространств имен в одном элементе с текущими XmlServices. Мы надеемся, что Google может реализовать подобное addNamespace метод в будущем, но это не так. Вы можете объявить только одно пространство имен для каждого элемента. Пример кода в соответствии с кодом пространств имен W3schools XML.

<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);
 }

Если кто-то все еще сталкивается с этой проблемой, вы можете использовать метод parse, как в этом примере, где я установил два пространства имен 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);

Обычно вы объявляете пространство имен xsi , чтобы указать schemaLocation. Если вы это сделаете, пространство имен xsi будет добавлено:

      var xsi = XmlService.getNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
var serv = XmlService.getNamespace('serv', 'http://www.webex.com/schemas/2002/06/service');
var root = XmlService.createElement('message', serv)
  .setAttribute('schemaLocation', 'http://url.of.my schema.xsd', xsi);
var document = XmlService.createDocument(root);
var xml = XmlService.getPrettyFormat().format(document);
console.log(xml);

Вывод консоли:

      <?xml version="1.0" encoding="UTF-8"?>
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://url.of.my/schema.xsd" />
Другие вопросы по тегам