谷歌脚本解析xml

时间:2017-11-24 15:44:12

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

XML:

 <issues total_count="210" offset="0" limit="25" type="array">
    <issue>
    <id>22079</id>
    <project id="21" name="name1"/>
    <description>Some text</description>
    <start_date>2017-11-22</start_date>
    <custom_fields type="array">
    <custom_field id="36" name="cf_36">
    <value>cf_36_value</value>
    </custom_field>
    <custom_field id="28" name="cf_28">
    <value>cf_28_value</value>
    </custom_field>
    <value type="array"/>
    </custom_field>
    </custom_fields>
    </issue>

嗨,我正在尝试获取循环中所有字段的值,然后将数据插入到工作表中。

function APIRequest (url,sheet) {

  var xml = UrlFetchApp.fetch(url).getContentText();

  var DOC = Xml.parse(xml);
  var issues = DOC.issues.issue

  for(var c=0; c<issues.length;c++){
   var issue = issues[c];
    var id = issue.getElement('id').getText();

  sheet.appendRow([id]);
  }
 }

我的问题是我无法从XML中获取每个“问题”的值“cf_36_value”

1 个答案:

答案 0 :(得分:1)

这个答案怎么样?您可以使用XML Service Service for Google Apps Script解析XML数据。从你的问题和脚本中,我理解你想要做的事情如下。

  • 您想使用Google Apps脚本创建脚本。
  • &#34;问题&#34;有几个要素。在&#34;问题&#34;。
  • &#34; custom_fields&#34;在&#34;问题&#34;。
  • &#34; custom_field&#34;有几个要素。 in&#34; custom_fields&#34;。
  • 您希望元素下的值属性为id="36"
    • 那是cf_36_value

以上几点反映的修改后的脚本如下。

修改后的脚本:

var data = XmlService.parse(xml);
var issue = data.getRootElement().getChildren("issue");
var result = [];
for (i in issue) {
  var custom_field = issue[i].getChild("custom_fields").getChildren("custom_field");
  for (j in custom_field) {
    if (custom_field[j].getAttribute("id").getValue() == 36) { // If you want values of other ID, please set this.
      result.push([custom_field[j].getChild("value").getValue()]);
    }
  }
}
sheet.getRange(sheet.getLastRow() + 1, 1, result.length, result[0].length).setValues(result);

参考文献:

如果我误解了你的问题,请告诉我。你能告诉我们整个XML数据吗?我想修改我的答案。由于您的问题的XML数据未完成,我担心它。