在Google Apps脚本中使用XMLService向元素添加两个命名空间

时间:2015-03-12 01:13:28

标签: xml google-apps-script xml-namespaces xmlservice

我需要使用Google Apps脚本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);

3 个答案:

答案 0 :(得分:2)

我担心您无法在当前XmlServices的同一元素中声明多个名称空间。我们希望Google可以在未来实施类似的addNamespace方法,但事实并非如此。您只能为每个元素声明一个名称空间。根据{{​​3}}

的示例代码
<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);
 }

答案 1 :(得分:1)

如果任何人仍然面临这个问题,你可以使用像我在这个例子中设置两个名称空间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>");

答案 2 :(得分:1)

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