Как парсить XML ?

Troll_UA

Client
Регистрация
11.04.2016
Сообщения
121
Благодарностей
37
Баллы
28
В новой зенке появилась возможность парсинга XML, вот я что то никак не пойму как зенкой можно розпарсить файл. Есть скрипт который парит результат в таблицу. Хочется понять как это можно сделать в зено?

Собственно сам скрипт:
Код:
 var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Admin');
  var o=JSON.parse(Utilities.newBlob(Utilities.base64Decode(ss.getRange("D15").getValue())).getDataAsString());
  var col=ss.getRange('C15').getValue();
  var i = sheet.getLastRow()+1;
  var xml = UrlFetchApp.fetch(o.url[e]).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var n=0;
  var tovar = "";
  var s = document.getRootElement().getChildren();
  var price = 0;
  var id_order = 0;
  while(n < s.length){
    if (s[n].getChild('status').getValue()=='Новая почта') {
      sheet.getRange(col[0]+i).setValue(s[n].getChild('add_time').getValue());
      id_order = s[n].getAttribute('id').getValue();
      if (col[1]!=' ') sheet.getRange(col[1]+i).setValue(id_order);         
      if (s[n].getChild('fld3')) sheet.getRange(col[2]+i).setValue(s[n].getChild('fld3').getValue());
      if (s[n].getChild('fld1')) sheet.getRange(col[3]+i).setValue(s[n].getChild('fld1').getValue().replace(/[^\d]/gi,'').substr(-10));
      var ii=0;
      var t = s[n].getChild('order_items').getChildren();
      while(ii < t.length) {
        if (t[ii].getChild('price')) price = t[ii].getChild('price').getValue().replace('.', ',');
        tovar += t[ii].getChild('name').getValue() + " " + t[ii].getChild('cnt').getValue().replace('.00','') + " шт. х " + price + " грн.";
        ii++;
        if (ii != t.length) tovar += "\r\n";           
      }
      if (s[n].getChild('fld5').getValue()!='') tovar += '\r\n(' + s[n].getChild('fld5').getValue() + ')'; 
      sheet.getRange(col[4]+i).setValue(tovar);
      tovar = "";
      if (s[n].getChild('amount')) sheet.getRange(col[5]+i).setValue(s[n].getChild('amount').getValue().replace('.', ','));
      if (s[n].getChild('fld4')) sheet.getRange(col[6]+i).setValue(s[n].getChild('fld4').getValue());
      if (s[n].getChild('fld2')) sheet.getRange(col[10]+i).setValue(s[n].getChild('fld2').getValue());   
      if (col[18]!=' ' && s[n].getChild('email')) sheet.getRange(col[18]+i).setValue(s[n].getChild('email').getValue());
      if (s[n].getChild('payment')) sheet.getRange(col[8]+i).setValue(s[n].getChild('payment').getValue());
      if (o.color) sheet.getRange(i+':'+i).setBackground('yellow');
      i++;     
    }   
    n++;   
  }
}
Файл исходник и результат в архиве.
Забыл сказать скрип парсит результат Таблицы google а мне бы просто в эксель.

Заранее спасибо.
 

Вложения

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Кодер, написавший этот код, явно любит усложнять себе жизнь, чего стоит только вызов 4 раза getchild в конце и использование его в if и написание всего кода в одной куче
 

Troll_UA

Client
Регистрация
11.04.2016
Сообщения
121
Благодарностей
37
Баллы
28
Так как все же спарсить этот XML?
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93

Вложения

  • Спасибо
Реакции: seomiks

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113
Через сниппет вариантов множество.
Если использовать только функцонал зенки, тогда так:
А это для новой версии? Что то мейкер вылетел 5991 у меня после запуска.
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
651
Баллы
93
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Всем салют!
Может кто подсказать что указывать при разборе XML?
Файл изначально для импорта в WP.
Название статьи и урл нормально парсятся, а вот контентная часть не идет. Пустой столбик в таблице.
Указывал и полную строку от точки {http... и без скобок как на скрине.

xml2.png
xml1.png
 
Последнее редактирование:

radv

Client
Регистрация
11.05.2015
Сообщения
3 713
Благодарностей
1 897
Баллы
113
Название статьи и урл нормально парсятся, а вот контентная часть не идет. Пустой столбик в таблице.
Указывал и полную строку от точки {http... и без скобок как на скрине.
Судя по скрину, там контент зашифрованный. Проверь получаемое значение. Сохрани xml в файл, и проверь содержимое и сам парсинг. Может ты подсвойство не верно указал, попобуй включая фигурные скобки. или через шарп распарсить
 
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Судя по скрину, там контент зашифрованный. Проверь получаемое значение. Сохрани xml в файл, и проверь содержимое и сам парсинг.
Файл и так на диске. Это файл генерится доргеном для импорта в ВП.
Пробовал удалять все в скобках {} так ошибки лезут.
Собственно уже забил на встроенный парсинг XML, сделал на регулярках.
Но разобраться то надо.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 713
Благодарностей
1 897
Баллы
113

radv

Client
Регистрация
11.05.2015
Сообщения
3 713
Благодарностей
1 897
Баллы
113
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
На форуме про это вроде было статья.
Да не.. Импорт в ВП работает прекрасно. Просто что бы не заморачиваться с переделкой шаблона экспорта из доргена, решил просто эти XML парсить. :-)
Там же структурировано все и удобно.
А тут наткнулся на такую фигню что стандарная разборка XML Зенки давится этими скобками. Это баг или фича? Написал в ТП молчат)))
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 713
Благодарностей
1 897
Баллы
113
  • Спасибо
Реакции: Сибиряк

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 386
Благодарностей
3 308
Баллы
113
Всем салют!
Может кто подсказать что указывать при разборе XML?
Файл изначально для импорта в WP.
Название статьи и урл нормально парсятся, а вот контентная часть не идет. Пустой столбик в таблице.
Указывал и полную строку от точки {http... и без скобок как на скрине.

 
  • Спасибо
Реакции: Сибиряк

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)