Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсинг локально подключаемого xml файла объемом более 17 мб (https://javascript.ru/forum/misc/21384-parsing-lokalno-podklyuchaemogo-xml-fajjla-obemom-bolee-17-mb.html)

Hag1989 08.09.2011 00:51

Цитата:

Сообщение от Snipe (Сообщение 125450)
Эм, так а список ссылок как будут строится?

-из только что подгруженной части массива. К примеру первая группа ссылок у меня только в первом элементе Row, его и отпарсить по событию onLoad, далее при onClick на его ссылке (тот же текст к которому будут дописываться тег <a ></a> и массив значений атрибутов href=""), зная, что элементы первого Row связаны только со вторым Row, парсить второй, затем также ещё несколько Row.
Хотя, всё это слишком мудрено логичнее, не умножая сущностей, отпарсить все данные сразу поставив пользователю красивую заставку на время парсинга)))

Hag1989 08.09.2011 00:56

Важнее сейчас следующее: подскажите как заменить конструкцию с firstChild.data ведь документ с пустыми тегами типа <Col></Col> не проходит обработку, или как-нибудь создавать пустую строку чтобы firstChild.data находил объект? Замена <Col></Col> на <Col>-</Col> не выход из положения!

ваый 08.09.2011 01:22

А вот еще что можно оптимизировать. Создание новых нодов и потом appendChild - достаточно тяжелые операции. Гораздо легче создать строку, и потом вставить ее через innerHTML.
// Вместо
function createList(data) {
  var list = document.createElement("ul");
  for (var i = 0; i < data.length; i++) {
    var newItem = document.createElement("li");
    var newText = document.createTextNode(data[i]);
    newItem.appendChild(newText);
    list.appendChild(newItem);
  }
  return list;
}

// Делаем
function createList(data) {
  var list = document.createElement("ul"),
    cont = '', 
    i, l;

  for (i = 0, l = data.length; i < l; i++) {
    cont += '<li>' + data[i] + '</li>';
  }
  list.innerHTML = cont;
 
  return list;
}

Magneto 08.09.2011 01:42

Вам уже советовали использовать JSON вместо XML, я присоединяюсь к этому совету. Приблезительно как будет выглядеть файл:
[ [ "text1",
    "text2",
    "img/img1.png",
    "img/img2.png"],
  [ "text3",
    "text4",
    "img/img3.png",
    "img/img4.png"],
  [ "text5",
    "text6",
    "img/img5.png",
    "img/img6.png"] ]

Замечу что этот массив полностью аналогичен тому массиву который Вы пытаетесь получить с XML.

Есть еще идея, если Вы планируете использовать данный файл только в браузерах то Вы можете формировать изначально правильный JavaScript документ и подсоединять его к документу через теги:
<script type="text/javascript" src="data-table.js"></script>

Вот как примерно будет выглядеть документ:
var dataTable = [ [ 'text1',
                    'text2',
                    'img/img1.png',
                    'img/img2.png'],
                  [ 'text3',
                    'text4',
                    'img/img3.png',
                    'img/img4.png'],
                  [ 'text5',
                    'text6',
                    'img/img5.png',
                    'img/img6.png'] ];
tableLoad();


Замечу что этот метод кросбраузерный и он минимально нагружает процессор. Данный скрипт нужно подключать в самом конце документа и функция tableLoad(); должна уже быть определена где-то выше. Срабатывание этой функции означает что база полностью загружена и можно с ней работать.

Hag1989 08.09.2011 17:56

Спасибо, Magneto!
Главный вопрос: будет ли работать Json в CHM файле, т. е. на движке IE6? Я ведь пишу функции для CHM-справочника.


Часовой пояс GMT +3, время: 04:03.