Добавление двух пространств имен в элемент с использованием 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" />