LINUX.ORG.RU

Библиотека yXML версия 1.1

 , , , ,


0

0

Вчера вышла улучшенная версия небольшой открытой библиотеки yXML для работы с простыми XML-данными. yXML открыт по модифицированной лицензией BSD (GPL-совместима) и его исходник составляет всего около 300 строк на C. Очень прост в использовании. По сравнению с версией 1.0 произошли следующие изменения:

  • Улучшенная совместимость со стандартным XML (поддерживаем <?..> и <!..>, но пропускаем)
  • Поддержка простых текстовых значений внутри тегов (<tag>test</tag>)
  • Добавлена возможность прочитать целиком сразу файл с xml
  • Добавлены функции для поиска тегов и атрибутов по имени

>>> Подробности



Проверено: maxcom ()

Re: Библиотека yXML версия 1.1

>поддерживаем <?..> и <!..>, но пропускаем

Кого пропускаем то?

Deleted ()

Re: Библиотека yXML версия 1.1

> Добавлены функции для поиска тегов и атрибутов по имени

XPath поддерживает или свой лисапед?

Begemoth ★★★★★ ()

Re: Библиотека yXML версия 1.1

> версия 1.1 ... > Поддержка простых текстовых значений внутри тегов (<tag>test</tag>)

o_O По-моему с этого нужно было начинать, а не этим заканчивать.

Alan_Steel ★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Alan_Steel

Re: Библиотека yXML версия 1.1

> o_O По-моему с этого нужно было начинать, а не этим заканчивать.

А ну мне это было изначально не нужно. Поэтому реализовано только сейчас.

Вообще, чтобы минимизировать размер флейма, хочу отметить, что это узкоспециализированная библиотека, не поддерживающая целиком стандарт XML. Она нужна была под конкретные нужды. И хорошо, если пригодится ешё кому-то кроме меня :)

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от Deleted

Re: Библиотека yXML версия 1.1

>поддерживаем <?..> и <!..>, но пропускаем
>Кого пропускаем то?


Ну то есть, специальные теги <?..> и <!..> пропускаются, чтобы не выдавать ошибок. Однако их обработки нет.

То есть теперь можно записать чтото вроде:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ...>
<...>
</...>

И ошибки не будет как раньше =)

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от Begemoth

Re: Библиотека yXML версия 1.1

> XPath поддерживает или свой лисапед?

Свой лисапед... небольшой... складной такой :))

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> это узкоспециализированная библиотека, не поддерживающая целиком стандарт XML

Уж не для конфигов-ли? ;)

Alan_Steel ★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Alan_Steel

Re: Библиотека yXML версия 1.1

> Уж не для конфигов-ли? ;)

Ну... Мы конечно все понимаем, что для конфигов XML не нужен :) Однако тут оно нужно для файлов с данными, которые могут использоваться не только в первоначальной программе, но и в других (и под разными языками программирования, в том числе). Поэтому и выбран XML, так как является неким общим форматом, поддержка которого есть очень много где.

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Свой лисапед...

По каким причинам не был использован один из существующих парсеров? Скажем, сейчас трудно найти компьютер без libexpat.so

Manhunt ★★★★★ ()

Re: Библиотека yXML версия 1.1

Цитата со страницы проекта:

> Нужен был небольшой сишный XML парсер. В Интернете я особо не искал по этому поводу, при этом было желание попрограммить — вот так и появился yXML за пару вечеров работы.


То есть yXML - плод невежества его автора. Автор, я правильно понимаю, что yXML в сравнении с нормальными полноценными парсерами имеет лишь недостатки?

Manhunt ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Manhunt

Re: Библиотека yXML версия 1.1

> По каким причинам не был использован один из существующих парсеров?

Ну я долго в вопросе не разбирался, но то, что я видел было не удобно для использования. Мне нужно было так -- есть на входе файл с данными и надо его быстро прочитать в память. А я видел следующее: нужно было объявлять callback-и для чтения тегов и атрибутов, внутри них обрабатывать распарсенные имена. Как-то запарно очень. Наверняка надо было больше поискать, но было проще написать свой парсер за пару вечеров, зато меня он полностью устраивает :)

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от Manhunt

Re: Библиотека yXML версия 1.1

> Автор, я правильно понимаю, что yXML в сравнении с нормальными полноценными парсерами имеет лишь недостатки?

Какие недостатки?

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Какие недостатки?

Не поддерживает стандарт XML. Плохо оттестирован. Не умеет эффективно работать с большими файлами.

Manhunt ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Какие недостатки?

Гораздо интереснее вопрос: какие преимущества? В чем заключается киллер-фича этой библиотеки, выгодно отличающая ее ото всех остальных подобных либ?

Если киллер-фича есть, то ее нужно упоминать в тексте новости и (большими жирными буквами) на главной странице проекта.

Если киллер-фичи нет, то лучше не замусоривать интернет ;)

Manhunt ★★★★★ ()

Re: Библиотека yXML версия 1.1

Дежавю? Матрица перезагружается?

Gukl ★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Manhunt

Re: Библиотека yXML версия 1.1

> Гораздо интереснее вопрос: какие преимущества?

Для меня преимущество в том, что она полностью соответствует моим нуждам. Ну это наверное преимущество любой софтины для её автора =)) Небольшой код позволяет легко разобраться в том как там всё устроено, если потребуется и модифицировать. Можно легко встроить в свою программу и её вес существенно не изменится.

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

В общем, это узкоспециализированное решение для тех, кому подойдёт, имеющее право на существование.

mrhx ()

Re: Библиотека yXML версия 1.1

Автор молодец с нуля делают финальную стабильную продакшен версию.

А то другие годами идут до номера 0.9, а здесь сразу 1.1.

Также радует, что эта библиотека работает под процессорами AMD Turion 64 и Intel Atom N270 и в операционных системах MS Windows XP SP3 и ОС Ubuntu Linux 9.04.

sign ()
Ответ на: Re: Библиотека yXML версия 1.1 от sign

Re: Библиотека yXML версия 1.1

в курсе вообще, что номер версии 1.0 значит? если реализован весь функционал, то почему бы и нет?

bobrik ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Для меня преимущество в том, что она полностью соответствует моим нуждам. Ну это наверное преимущество любой софтины для её автора =))

Верно, но только для автора. Всему остальному миру это никаких бонусов не дает.

> Небольшой код позволяет легко разобраться в том как там всё устроено, если потребуется и модифицировать.


Хм. Если бы библиотека была хорошо оттестирована и соотвествовала стандарту, нужды в модификации не возникало бы. И разбираться в ее внутренностях тоже было бы не нужно. Ничего кроме ненужной головной боли я тут не вижу.

> Можно легко встроить в свою программу и её вес существенно не изменится.


Это же относится и к полноценным парсерам с динамической линковкой.

Manhunt ★★★★★ ()

Re: Библиотека yXML версия 1.1

Еще раз: yxml_t *xml = yxml_read("<data id='mydata'> test <detail index='1' /><detail index='2' /></data>", &p);

ЭТО - НЕ XML

stellar ()

Re: Библиотека yXML версия 1.1

я конечно все понимаю, но нахрена для очередного хелло-ворда уже вторую новость пропускать?

А завтра добавится поддержка комментариев (читаем и не пропускаем) и снова будет новость на лоре?

А по сути программы, бредноносное поделие ибо для малых файлов зумель не нужен, а для больших - такой парсер смерти подобен...

AVL2 ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

>Ну то есть, специальные теги <?..> и <!..> пропускаются, чтобы не выдавать ошибок. Однако их обработки нет.

Бред какой, а?

Юноша, а кодировка у вас для XML берется из libastral.so?

stellar ()
Ответ на: Re: Библиотека yXML версия 1.1 от stellar

Re: Библиотека yXML версия 1.1

> Еще раз: yxml_t *xml = yxml_read("<data id='mydata'> test <detail index='1' /><detail index='2' /></data>", &p);
> ЭТО - НЕ XML


Ну добавь туда информацию о версии xml и кодировке и получишь XML, хотя это не обязательно, насколько я знаю.

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от stellar

Re: Библиотека yXML версия 1.1

> Юноша, а кодировка у вас для XML берется из libastral.so?

А кодировки не поддерживаются :-[

Если хотите точных определений, то это подмножество XML, а не сам XML.

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от AVL2

Re: Библиотека yXML версия 1.1

> я конечно все понимаю, но нахрена для очередного хелло-ворда уже вторую новость пропускать?

Ну кому-нибудь наверняка пригодится, раз пригодилось мне.

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Если хотите точных определений, то это подмножество XML

Где дано точное описание этого подмножества?

Manhunt ★★★★★ ()

Re: Библиотека yXML версия 1.1

Автор, пробуйте внимательно следить за кодом. Собирайте проект с -Wall: посмотрите строки 251-253 и 276 в yxml.c:

long len;
FILE *f = fopen(filepath, "rb");
if (f)
{
...
}
if (plen) *plen = len;

Где инициализация len? Что будет, если fopen() вернет NULL?

andreyu ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Manhunt

Re: Библиотека yXML версия 1.1

> Где дано точное описание этого подмножества?

Действительно точного описания не написано.

mrhx ()

Re: Библиотека yXML версия 1.1

Последовательность <detail>simple&lt; &gt; text value</detail> парзится неверно.

Последовательность <трололо>ояебу</трололо> не парзится вовсе.

Последовательность <foo>1<bar>2</foo> парзится полностью, хотя не должна

Последовательность <xml><foo>1</foo></xml><xml></xml> парзится полностью, хотя не должна

Последовательность <foo>1<bar/> > </foo> парзится полностью, хотя не должна

Короче, аффтар! ПРОЧТИ ХОТЯ БЫ ОСНОВЫ прежде чем удивлять мир своими "трудами" http://ru.wikipedia.org/wiki/XML

stellar ()
Ответ на: Re: Библиотека yXML версия 1.1 от andreyu

Re: Библиотека yXML версия 1.1

> Где инициализация len? Что будет, если fopen() вернет NULL?

Ну неопределенное значение результата допустимо, если fopen вернет NULL, потому что вся функция вернёт NULL и результат *plen уже не будет иметь смысла. Хотя, так или иначе, да, тут моя ошибка, пропустил это.

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

>А кодировки не поддерживаются :-[

Спецификация требует, чтобы процессоры XML __обязательно__ поддерживали Юникод-кодировки UTF-8 и UTF-16.

Я задал строку в UTF-8. Ничего не работает.

>Если хотите точных определений, то это подмножество XML, а не сам XML.

Подмножество? Не смешите.

stellar ()

Re: Библиотека yXML версия 1.1

Минорный релиз, не тянет на новость.

yoghurt ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Ну кому-нибудь наверняка пригодится, раз пригодилось мне.

Вам оно пригодилось по той причине, что вы поленились разобраться в уже существующих парсерах. Человек, руководствующийся теми же соображениями что и вы, вашей библиотеки попросту не найдет.

Manhunt ★★★★★ ()

Re: Библиотека yXML версия 1.1

Ой)) Ну спасибо)) Поржал)))

Люди! Ну вы чо охренели? Чувак же как лучше хотел! :-)

ei-grad ★★★★★ ()

Re: Библиотека yXML версия 1.1

Автор, то что вы понаписали это не 300 строк кода. В таких исходниках копаться просто жутко. Немного полегчало после `indent -gnu` но там уже не 300, а более 350 строк получилось. Вы серьезно измеряете "понятность" программы количеством строк? Я конечно рад за вас и за то что вам доставляет удовольствие ваша работа, но до релиза вашей библиотеке еще очень далеко.

A-234 ★★★★★ ()

Re: Библиотека yXML версия 1.1

Один символ '<' тоже, оказывается, нормальный "XML".

stellar ()

Re: Библиотека yXML версия 1.1

Пару слов.

1. Непонятно зачем хранится длина у имён тегов и аттрибутов, поскольку всё равно они хранятся как сишные строки с терминирующим '\0'. Дублирование информации, в случае ошибки, может приводить к странным эффектам. Если уж хочется хранить строки с длиной, то для этого можно отдельный тип завести. Могу подарить свою str.h :) http://li.nix.la/str.h (можно считать паблик домеин :) )

2. Чтобы не читать ужаса определения длины файла (три вложенных ифа), стоило бы сделать отдельную функцию.

3. Проверки на NULL лучше делать явно, чем if(f).

Casus ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Casus

Re: Библиотека yXML версия 1.1

> Непонятно зачем хранится длина у имён тегов и аттрибутов

Ускорение поиска тегов/атрибутов по имени. Просто сравнить сначала длину, а потом уже содержимое быстрее, чем искать сразу через сравнение по содержимому.

mrhx ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

> Просто сравнить сначала длину, а потом уже содержимое быстрее, чем искать сразу через сравнение по содержимому.

Почему длину, а не хэш-функции от строк?

Manhunt ★★★★★ ()
Ответ на: Re: Библиотека yXML версия 1.1 от Manhunt

Re: Библиотека yXML версия 1.1

> Почему длину, а не хэш-функции от строк?

Да, хэш лучше, но дольше -- его еще вычислять надо, а тут уже длина готовая есть. Как бы промежуточное решение.

mrhx ()

Re: Библиотека yXML версия 1.1

По сабжу: РЖАК аффтар: пеши исчо

DrMoriarty ()
Ответ на: Re: Библиотека yXML версия 1.1 от bobrik

Re: Библиотека yXML версия 1.1

> в курсе вообще, что номер версии 1.0 значит? если реализован весь функционал, то почему бы и нет?

Ну вот я и радуюсь за автора, что весь функционал уже реализован.
Просто другие так программировать не умеют.
А автор за два вечера сделал сразу финальную версию с полным функционалом.

Кстати, если функционал окончательный, то видимо уже никогда не будут считывать тэги, содержащие минус.

Вот такой xml файл не "парсером" не распознается.

<?xml version="1.0" encoding="UTF-8"?>
<test-yxml/>

sign ()
Ответ на: Re: Библиотека yXML версия 1.1 от A-234

Re: Библиотека yXML версия 1.1

> но там уже не 300, а более 350 строк получилось

аналогично - пропустил через indent

393 1530 9405 yxml.c
54 280 1898 yxml.h
447 1810 11303 total

Итого 447 строк

sign ()
Ответ на: Re: Библиотека yXML версия 1.1 от Manhunt

Re: Библиотека yXML версия 1.1

> Где дано точное описание этого подмножества?

А как же yxml.c и yxml.h?
Вполне годится на точное описание формата

sign ()
Ответ на: Re: Библиотека yXML версия 1.1 от mrhx

Re: Библиотека yXML версия 1.1

>Ну я долго в вопросе не разбирался, но то, что я видел было не удобно для использования.
Можно было воспользоваться либо гуглом, либо командой apt-cache search xml (если в debian или производной), думаю управились бы быстрее чем за пару вечеров. Когда хочется создать свой велосипед, причем наплевать существуют ли уже подходящие решения или нет - это не профессионально. Думаю нижеприведенный код как пример API библиотеки вас бы устроил. Это из libxml.

xmlDocPtr doc;
xmlNodePtr cur;

doc = xmlParseFile(docname);

if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}

cur = xmlDocGetRootElement(doc);

if (cur == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}

if (xmlStrcmp(cur->name, (const xmlChar *) "story")) {
fprintf(stderr,"document of the wrong type, root node != story");
xmlFreeDoc(doc);
return;
}

eugene2k ()

Re: Библиотека yXML версия 1.1

>Поддержка простых текстовых значений внутри тегов (<tag>test</tag>)
>Добавлена возможность прочитать целиком сразу файл с xml

Ржунемагу! А че раньше не было? И этим можно было пользоваться??????

vada ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.