【问题标题】:Parsing XML on a Google Apps script在 Google Apps 脚本上解析 XML
【发布时间】:2016-07-11 20:11:47
【问题描述】:

这是我的 XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<response>
    <records>
        <record id='1'>
            <column name="Name"><value><![CDATA[John]]></value></column>
            <column name="Email"><value><![CDATA[john@gmail.com]]></value></column>
        </record>
        <record id='2'>
            <column name="Name"><value><![CDATA[Joe]]></value></column>
            <column name="Email"><value><![CDATA[joe@gmail.com]]></value></column>
        </record>
    </records>
</response>

而且,这是我尝试解析上述 XML 并将名称和电子邮件作为数组返回:

var document = XmlService.parse(the_above_xml);
var root = document.getRootElement();
var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
var records_all = document.getRootElement().getChildren('records', atom);
for (r=0; r<records_all.length; r++){
    var records = records_all[i].getChildren('record', atom);
    for (i=0; i< records.length; i++){
        columns = records[i].getChildren('column', atom);
        for (c=0; c< columns.length; c++){
            // I'm stuck here. I want to return an array of name and emails. 
        }
    }
}

我正在经历https://developers.google.com/apps-script/reference/xml-service/ 并且无法弄清楚如何实现它。我该如何解决?

【问题讨论】:

  • 你在这里并没有真正使用任何网络应用程序。这是一个编程问题,应该在Stack Overflow提问。
  • Google 应用程序不被视为网络应用程序吗?我正在使用谷歌应用程序脚本。我不明白。
  • xml 是文本 sn-p 还是位于 url 端点m

标签: google-apps-script xml


【解决方案1】:

怎么样:

function getRecords(xml) {
  var xmlDoc = XmlService.parse(xml);

  var response = xmlDoc.getRootElement();
  var records = response.getChild('records');
  var recordList = records.getChildren('record');

  var output = [];
  for (var i = 0, record; record = recordList[i]; i++) {
    var columnList = record.getChildren('column');
    var name = '';
    var email = '';
    for (var j = 0, column; column = columnList[j]; j++) {
      var attrName = column.getAttribute('name').getValue();
      var text = column.getChild('value').getText();
      if (attrName === 'Name') {
        name = text;
      } else if (attrName === 'Email') {
        email = text;
      }
    }
    output.push([name, email]);
  }
  return output;
}

此函数接受一个字符串参数,即您的 XML,并返回一个二维数组,数组的每一行都是姓名和电子邮件地址对。

【讨论】:

  • 如果你正在解析一个 RSS 提要,你必须使用 var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); 然后将 atom 传递给每个后续的 get* 函数(就像在 official example 中一样)。例如:root.getChildren('entry', atom)
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
相关资源
最近更新 更多