LINUX.ORG.RU

Вопрос по библиотеке expat


0

0

Имеем такой xml документ:

***********************************************
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<x y="yy" z="zz">
   <y>yyyy</y> 
   <z>zzzz</z> 
</x>
***********************************************

Имеем таку программку на C:

***********************************************
#include <stdio.h>
#include <expat.h>

#define BUFFSIZE 1024
char Buff[BUFFSIZE];
int Depth;
XML_Parser first;

static void XMLCALL start(void *data, const char *tag, const char **attr)
{
    int i;
    for (i = 0; i < Depth; i++) printf(" |->");
    printf("tag=%s userdata=%s\n", tag, (char*)data);

    for (i = 0; attr[i]; i += 2)
    {
	printf("\tattrib %s='%s'\n", attr[i], attr[i + 1]);
    }
    Depth++;
}

static void XMLCALL end(void *userdata, const char *tag)
{
    Depth--;
}

int main (void)
{
    int done, len;
    first = XML_ParserCreate(NULL);
    XML_SetElementHandler(first, start, end);
    do
    {
	len = fread(Buff, 1, BUFFSIZE, stdin);
	done = feof(stdin);
	XML_Parse(first, Buff, len, done);
    } while (!done);
    XML_ParserFree(first);
    return 0;
}
****************************************************************

Что нам надо: Нам надо получить собственно наименование тагов(Получили, таги выводит как надо), нам нужно получить параметры у тагов если они есть(Тоже разобрался - несложно). 

Нам надо получить собственно данные которые заключены между тагов.
Тут я заебался. Ну не едут лыжи и всё... Где только уже не спрашивал - такое впечатление что никто и никогда не парсил xml на С.
Местные гуру - будьте так любезны,  объясните что тут не так? Почему 
*data всегда возврашает NULL???? Буду крайне благодарен если приведёте пример, в котором на stdout выводится содержимое между тагов...... (С использование expat понятное дело :)

anonymous

Для того чтобы прочитать данные между тегами надо воспользоваться еще одной функцией (см. XML_SetCharacterDataHandler в документации). *data и *userdata указатели на данные пользователя и задаются ф-цией XML_SetUserData.

>>Буду крайне благодарен если приведёте пример, в котором на stdout выводится содержимое между тагов

В исходниках expat'a есть пара примеров.

Evgeny_I
()
Ответ на: комментарий от Evgeny_I

>>(см. XML_SetCharacterDataHandler в документации). *data и *userdata >>указатели на данные пользователя и задаются ф-цией XML_SetUserData.
ПАсибо! Я догадывался - но... :)

>>В исходниках expat'a есть пара примеров.
Х/з - я там нашёл только примеры которые выводят названия тегов -
примеров выводящих данные содерждащиеся между тегов нет....

P.S
Всёравно Пасиб.
А где можно pdf документацию на expat найти???


anonymous
()
Ответ на: комментарий от anonymous

>А где можно pdf документацию на expat найти??? Не знаю, я пользуюсь html версией.

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