< 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 11:33


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

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


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

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


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

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


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

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


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

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

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


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

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


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

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

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


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

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


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

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


Добавяне на коментар
Не пишете nicknames, освен ако не се обръщам така към вас.
Е-мейл адресът няма да се показва на сайта.
Към него ще има връзка.

Коментарът трябва да е написан на български с кирилица или на английски. Останалите се трият.

Запомни адреса и името ми, за да не го пиша следващия път
начало
Valid XHTML 1.0! Valid CSS!