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

  • Автор темы Автор темы Troll_UA
  • Дата начала Дата начала

Troll_UA

Client
Регистрация
11.04.2016
Сообщения
121
Реакции
38
Баллы
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 а мне бы просто в эксель.

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

Вложения

Кодер, написавший этот код, явно любит усложнять себе жизнь, чего стоит только вызов 4 раза getchild в конце и использование его в if и написание всего кода в одной куче
 
Так как все же спарсить этот XML?
 

Вложения

  • Оценить
Реакции: seomiks
Через сниппет вариантов множество.
Если использовать только функцонал зенки, тогда так:
А это для новой версии? Что то мейкер вылетел 5991 у меня после запуска.
 
Всем салют!
Может кто подсказать что указывать при разборе XML?
Файл изначально для импорта в WP.
Название статьи и урл нормально парсятся, а вот контентная часть не идет. Пустой столбик в таблице.
Указывал и полную строку от точки {http... и без скобок как на скрине.

xml2.png
xml1.png
 
Последнее редактирование:
Название статьи и урл нормально парсятся, а вот контентная часть не идет. Пустой столбик в таблице.
Указывал и полную строку от точки {http... и без скобок как на скрине.
Судя по скрину, там контент зашифрованный. Проверь получаемое значение. Сохрани xml в файл, и проверь содержимое и сам парсинг. Может ты подсвойство не верно указал, попобуй включая фигурные скобки. или через шарп распарсить
 
Судя по скрину, там контент зашифрованный. Проверь получаемое значение. Сохрани xml в файл, и проверь содержимое и сам парсинг.
Файл и так на диске. Это файл генерится доргеном для импорта в ВП.
Пробовал удалять все в скобках {} так ошибки лезут.
Собственно уже забил на встроенный парсинг XML, сделал на регулярках.
Но разобраться то надо.
 
На форуме про это вроде было статья.
Да не.. Импорт в ВП работает прекрасно. Просто что бы не заморачиваться с переделкой шаблона экспорта из доргена, решил просто эти XML парсить. :)
Там же структурировано все и удобно.
А тут наткнулся на такую фигню что стандарная разборка XML Зенки давится этими скобками. Это баг или фича? Написал в ТП молчат)))
 
  • Оценить
Реакции: Сибиряк
Всем салют!
Может кто подсказать что указывать при разборе XML?
Файл изначально для импорта в WP.
Название статьи и урл нормально парсятся, а вот контентная часть не идет. Пустой столбик в таблице.
Указывал и полную строку от точки {http... и без скобок как на скрине.

 
  • Оценить
Реакции: Сибиряк

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