Google App Script:从XML文件中提取数据

时间:2017-07-07 14:57:00

标签: xml google-apps-script xml-parsing

我需要将此XML结构提取到Google电子表格中,

<directory>
    <fieldset>
        <field id="displayName">Display name</field>
        <field id="firstName">First name</field>
    </fieldset>
    <employees>
        <employee id="200">
            <field id="displayName">Donald Duck</field>
            <field id="firstName">Donald</field>
        </employee>
    </employees>
</directory>

我已经取消了所有<field id>,但我只需要<employee id>而且我不知道该怎么做,请原谅我没有任何关于XML所以请帮助我。

function ImportXML() {

   var url = "https://api.Fake.com/employees/directory";
   var response = UrlFetchApp.fetch(url, params);



    var xml = response.getContentText();
    var doc = XmlService.parse(xml);
    var root = doc.getRootElement();


    logChildren(doc.getRootElement().getChildren());


 function logChildren(elements){


    var ss = SpreadsheetApp.getActiveSpreadsheet();

    var sheet = ss.getSheets()[0];  

    for (var i = 0; i < elements.length; i++) {

    var range = sheet.getRange(1,i+1);

    range.setValue(elements[i].getText());

    if(elements[i].getContentSize() > 1){
    var children = elements[i].getChildren();

    logChildren(children);
    }
     }
      }

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

查看有关reading a specific node using appscript

的此文档
  

<强> getChild(名称)

     

获取具有给定名称且没有名称空间的第一个Element节点   是此Element节点的直接子节点。如果没有这样的节点,   此方法返回null。

     

参数

     

名称类型描述name字符串子元素节点的名称   返回

     

元素 - 元素节点,如果没有直接子节点,则为null   具有给定名称且没有名称空间的元素节点

使用此工作示例作为指南。

  function readSpecificNode() {
  var url = 'https://www.w3schools.com/xml/books.xml';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var entries = document.getRootElement().getChild('book').getChild('title').getAttribute('lang').getValue();
  Logger.log(entries);
}

不要忘记将url更改为指定的xml,将getChild元素更改为&#39; book&#39;,&#39; title&#39;和&#39; lang&#39;到&#39;目录&#39;,&#39;员工&#39;员工&#39;然后将getAttribute设置为&#39; id&#39;所以它适合你想要的输出。