< HomePage | Снимки
<- Четвъртък, 4 Януари 2007 | Начална страница | Събота, 6 Януари 2007 ->
Петък, 5 Януари 2007

Ай ша ти е.. и XML-а, SimpleXML парсер и подобни дивотии. Я за по-лесно вместо да мъкна цял xml parser за едно дребно нещо където съм принуден да работя с XML, ще взема да изполвам ей тази грозотия която стъкмих набързо и работи достатъчно добре в случая:

function pseudo_xml_parse($data) {
  $res = array(); $id = 0;
  foreach ($data as $line) { /* "Parse" XML ;) */
    if (ereg("<([a-zA-Z]+)>([А-Яа-я:0-9a-zA-Z, \./]+)</([a-zA-Z]+)>", $line, $regs)) { /* Values */
      if (isset($res[$id][$regs[1]])) $id++;
      $res[$id][$regs[1]] = $regs[2];
    } else if (ereg("<([a-zA-Z]+)/>", $line, $regs)) { /* Booleans */
      if (isset($res[$id][$regs[1]])) $id++;
      $res[$id]["values"][$regs[1]] = $regs[1];
    } else if (ereg("<([a-zA-Z]+) ([a-zA-Z \"=]+)/>", $line, $regs)) { /* Messages */
      if (isset($res[$id][$regs[1]])) $id++;
      $res[$id]["values"][$regs[1]] = $regs[2];
    }
  }
  if (!$id) { /* If there is only one record, copy data do $res */
    $res = $res[0];
    $res[0] = $res;
  }
  return $res;
}

Не отговарям за вредите причинени от опитите за прочит на този код ;)

[ Коментари: 10 ]
Коментари

Да, не е лесен за четене. Трябвало е да ползваш perl регулярни изрази, за да е очевиден ;-)

Написа Пейо (www) на 09-Jan-2007 09:33


Е в случая е се тая :) Между другото когато е highlight-нат кода си се чете добре, а в сравнение със SimpleXML парсер направо си е красота.

Написа Георги Чорбаджийски (www) на 09-Jan-2007 09:37


Абе прав си ама за нещо малко по сложно(примерно nested elements), SimpleXML-а си има своите глезотийки, които могат да те прилъжат да използваш въпросното разширение вместо да връткаш измежду многопространствени(ей колко сложни думи съм знаел) масиви.

Написа Георги Соколов (www) на 09-Jan-2007 10:03


Чорбаджийски, само мързелив некадърник може да напише подобна идиотщина!
Парсерите не са да ги гледаш като изтребител. Като си толква прост, че дори не можеш да ги ползваш, поне не публикувай дивотиите си публично, да ти се смеят хората.

Написа инж. Дончев на 11-Jan-2007 19:15


Как беше приказката, пет минути срам после цял живот инжинер. Честито ;)

Написа Георги Чорбаджийски (www) на 11-Jan-2007 19:51


Разсмя ме, честно :)
Приказката е:
5 минути да напишеш някоя дивотия плюс глупава гордост от дивотията - цял живот в кеша на Google и в смеха на хората :)

Ще те давам за пример, това горе си е уникално малоумно решение! Ще си го взема и запазя като един от най-ярките бисери в ИТ-то в България! И в твоя чест с удоволствие ще спазя Creative Commons License-то; няма да пропусна да те споменавам като автора му, бъди спокоен :)

Написа инж. Дончев на 11-Jan-2007 21:19


Щом те радва, ползвай с радост, пази и разпространявай инженере. Не успях да разбера, коя част от "псевдо_xxxx", "грозотия" и "частно решение, работещо в случая" не разбра, та рипаш все едно съм написал, че туй парче код е госпъл.

Написа Георги Чорбаджийски (www) на 12-Jan-2007 07:50


@инж. Дончев >"... само мързелив некадърник може да напише подобна идиотщина!..."

Бе то мързеливите некадърници обикновено гледат да ползват готови решения, независимо колко ще утежнят нещата, а не да се мъчат да ги опростят, ама както и да е.

Написа Божо на 12-Jan-2007 15:09


Наистина ли ти беше по-лесно да напишеш това, отколкото да се пребориш с един парсър?
Това си е мазохизъм ако питаш мене...

Написа xpucmo на 31-Jan-2007 09:37


Не съм се борил с парсъра, просто не мога да приема да ползвам нещо което е 100K (и 10 да е, все тая) при условие, че десет реда ми вършат същата работа в случая.

Написа Георги Чорбаджийски (www) на 31-Jan-2007 10:29