google script разбор xml

1

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]);
  }
 }

Моя проблема в том, что я не могу получить значения "cf_36_value" из XML для каждой "проблемы",

Теги:
google-apps-script
parsing
google-sheets

1 ответ

1
Лучший ответ

Как насчет этого ответа? Вы можете анализировать XML-данные, используя службу XML Service Service для Google Apps Script. Из вашего вопроса и сценария я понял, что вы хотите сделать следующим образом.

  • Вы хотите создать скрипт с помощью Google Apps Script.
  • В "проблемах" есть несколько элементов "вопроса".
  • В "вопросе" есть один элемент "custom_fields".
  • В "custom_fields" есть несколько элементов "custom_field".
  • Вы хотите значение под элементом с атрибутом 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 вашего вопроса не заполнены, я беспокоюсь об этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню