Pull to refresh

Пишем свой XML-парсер

Reading time9 min
Views71K

Предыстория


Решив запустить небольшой сервис на подаренном мне хостинге, оказалось, что там нету ни одного xml-парсера: ни SimpleXML, ни DOMXML, а только libxml и xml-rpc. Недолго думая, я решил написать свой. Мне требовался разбор не сложных rss-лент, поэтому хватило достаточно просто класса xml => array.[1]

Но для интересной статьи этого было явно не достаточно, поэтому сейчас мы напишем свою замену для SimpleXML. А заодно пробежимся по многим интересным возможностям PHP 5.

Постановка задачи


Доступ к элементам у нас будет осуществляться как доступ к свойствам класса, например $xml->element, а доступ к атрибутам элемента, как к массиву, те $xml->element['attr'], также реализуем проверку на существование атрибута при помощи isset() и итерацию по элементам при помощи foreach. И так, начнем.
Читать дальше →
Total votes 1: ↑1 and ↓0+1
Comments42

Мир лицензий: разбираемся с MIT license

Reading time4 min
Views38K
image
В предыдущих статьях я постарался рассказать про лицензии GPL и BSD, их историю, виды и чем они отличаются друг от друга. В этот раз я постараюсь рассмотреть другую, чуть менее популярную лицензию — X11(MIT) license.

Читать дальше →
Total votes 36: ↑34 and ↓2+32
Comments21

Маленькая история о том, как я переустанавливал ОС из-за libexpat, или как не стоит обрабатывать ошибки

Reading time2 min
Views5.4K

Альтернативный заголовок: "В любой непонятной ситуации возвращай Out of memory".

Давеча решил я запустить свой самописный сервер веселья ради, как я делал это тысячу раз до этого, и каково же было моё удивление, когда я внезапно увидел следующую строчку в консоли:

Error when parsing "example_proj.xml": 1:0 out of memory

Для парсинга конфигурационных файлов в проекте используется сторонняя библиотека (назовём её LibCustomConfig), которая в свою очередь использует широко распространённую libexpat.

Итак. Out of memory? На XML в 50 строчек? Сказать, что я был ошарашен - это не сказать ничего. "Но ведь раньше всё работало".

Читать далее
Total votes 30: ↑28 and ↓2+26
Comments12