Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 24
1

JS (Google Script) и парсинг XML

24.11.2017, 21:38. Показов 4529. Ответов 2

Author24 — интернет-сервис помощи студентам
Добрый день, нужна ваша помощь...

Существует некий XML, вот часть его кода:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<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-24</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>
Я пытаюсь парсить его и в цикле получать необходимые мне значения, чтобы потом эти данные вставить в гугл-таблицу.
Вот моя функция, в которую я передаю урл с хмл, и гугл таблицу.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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]);
  }
 }
С получением значением из id и start_date, проблем нет, все отрабатывает замечательно.

А вот и сам собственно вопрос, помогите получить значение <custom_field id="28" name="cf_28">, т.е. вот это значение cf_28_value

Помогите разобраться. С ява скрипт не работал, хмл раньше не парсил. Синтаксис JS читабельный, но т.к. c JS столкнулся только сейчас в гугл-скриптах, то отсюда и все трудности с затыками.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2017, 21:38
Ответы с готовыми решениями:

Парсинг xml ответа google maps
Всем привет, народ кто сталкивался с google maps и его ответом формата xml ? &lt;?xml...

Парсинг script
Всем привет! Для сайт необходимо парсинг сделать. Задача простая. Если бы не наличие встроенных...

Парсинг сайта с тегом <script>
Всем доброго времени суток! Сразу хочу попросить &quot;не кидать в меня помидоры&quot;! :pardon: Темы я...

Парсинг XML-файла с помощью LINQ to XML
Здрасивуйте. Трабл никак не могу понять в чем дело не могу считать инфу с XML login, getWorkersOUs...

2
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
27.11.2017, 16:55 2
Javascript
11
    var cf28 = issue.getChildText("cf_28")
А так не получится?
Иначе ищите ответ в документации
https://developers.google.com/... ce/element
0
4 / 4 / 1
Регистрация: 12.08.2018
Сообщений: 6
13.08.2018, 00:02 3
Для файла
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<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-24</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>
      </custom_fields>
   </issue>
</issues>
Верен следующий код

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function fn(sheet){
  
  var res = [];
  
  var xml = HtmlService.createHtmlOutputFromFile('xml').getContent();
  var doc = XmlService.parse(xml);
  var issues = doc.getRootElement().getChildren();
  for(var i = 0; i < issues.length; i++){
    var issue = issues[i];
    var custom_fields = issue.getChild('custom_fields').getChildren();
    for(var j = 0; j < custom_fields.length; j++){
      var custom_field = custom_fields[j];
      if(custom_field.getAttribute('id').getValue() === '28' && 
         custom_field.getAttribute('name').getValue() === 'cf_28')
        res.push([custom_field.getValue()]);
    }
  }
  
  sheet.getRange(sheet.getLastRow() + 1, 1, res.length, res[0].length).setValues(res);
  
}
0
13.08.2018, 00:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2018, 00:02
Помогаю со студенческими работами здесь

Изменение ячейки Google Script
Всем привет! Народ, такая проблема. Есть гугл-таблица: ...

Аналог ВПР в Google Apps Script?
Всем привет, Не уверен что это правильная ветка форума, но попробую: Есть ли в GAS аналог...

Ошибка с чтением даты google script
Доброй ночи! В таблице находится дата. При чтении таким образом: var curDate =...

Определение активной папки в Google Script
Пишу генератор заданий в Google Apps Script. Столкнулась с проблемой определения текущей (активной)...

Xml Parser + Lotus Script
Доброго времени суток!! Возникла такая задачка. Хml перегнать в txt, и просто работать с xml...

Не работает VB script XLS в XML
Есть программа ScriptRunner, которая на сервере запущена. Крутит VB скрипт. На сервере стоит офис...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru