The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите!!! Нужен парсер XML на C"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 01-Июл-04, 11:13  (MSK)
Доброго времени суток.

Скачал парсер expat. Установил под линукс. Он работает и что-то парсит, но я не пойму как использовать не готовую программу а исходный код в своей программе. Читал документацию, возникают большие трудности с пониманием - английский знаю очень плохо. Если кто знает как использовать этот или любой другой парсер, пжалуйста, подскажите или дайте ссылку.

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 01-Июл-04, 12:39  (MSK)
Помогите
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 01-Июл-04, 13:45  (MSK)
IMHO lixml лучше, чем expat. Работает быстрее и стабильнее.
Примеры работы с ним можешь почитать на http://www.xmlsoft.org/examples/index.html
Скачать там же.
Изложи проблему подробнее, не совсем понятно, тебе надо просто XML парсить?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 01-Июл-04, 15:55  (MSK)
>Изложи проблему подробнее, не совсем понятно, тебе надо просто XML парсить?

Излагаю подробнее. Есть прграмка на С, которая запрашивает у сервера XML страничку с результатом поиска слова(н-р sex), после получения странички её надо представит в удобном виде, типа

url&&то, что в теге2(н-р description),...\n
url&&то, что в теге2(н-р description),...\n

и записать в файл.
Вот и всё.
Но с разбором проблемы. Писать такую процедурку самому - гемор. Посоветовали найти готовый парсер. Дальше знаешь.
Помоги, если можешь.

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 01-Июл-04, 17:32  (MSK)
Ну... надеюсь, это поможет (для libxml2)

--xmltest.c--
#include <libxml/parser.h>
#include <stdio.h>

static const char * xml = "<results>"
"<result><url>http://ya.ru</url><description>Yandex</description></result>"
"<result><url>http://google.com</url><description>Google</description></result>"
"</results>";

int main (int argc, char * argv[]) {
xmlDocPtr document;
xmlNodePtr root_node, node, child;
char url[1024], description[1024];

LIBXML_TEST_VERSION

document = xmlReadMemory (xml, strlen (xml), "notexist.xml", NULL, 0);
if (!document) {
fprintf (stderr, "Failed to parse...\n");
exit (-1);
}

root_node = xmlDocGetRootElement (document);
// Перебор тегов <result>
for (node = root_node->children; node; node = node->next) {
      // Перебор дочерних тегов
for (child = node->children; child; child = child->next) {
if (!strcmp (child->name, "url"))
strcpy (url, xmlNodeGetContent (child->children));
if (!strcmp (child->name, "description"))
strcpy (description, xmlNodeGetContent (child->children));
}
printf ("%s %s\n", url, description);
}

xmlFreeDoc (document);

xmlCleanupParser ();
}
--xmltest.c--

Компилировать gcc `xml2-config --libs --cflags` -o xmltest xmltest.c

Код, мягко говоря, далек от совершенства ;) Но пример дает...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 01-Июл-04, 19:54  (MSK)
>Ну... надеюсь, это поможет (для libxml2)

>Компилировать gcc `xml2-config --libs --cflags` -o xmltest xmltest.c
>
>Код, мягко говоря, далек от совершенства ;) Но пример дает...

Доброго времени суток, StingFire.
Спасибо огромное.
Но -((;
При компиляции вообще не ругается, но при попытке запуска говорит следующее
[root@websitebuilder work]# ./parse
Warning: program compiled against libxml 206 using older 205
./parse: relocation error: ./parse: undefined symbol: xmlReadMemory

Подскажи плиз, если можешь.
Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 01-Июл-04, 16:54  (MSK)
>Скачать там же.

Извини за ламерство, но что именно я должен скачать?(Адрес. Не могу найти на сайте).

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 01-Июл-04, 17:35  (MSK)
>Извини за ламерство, но что именно я должен скачать?(Адрес. Не могу найти
>на сайте).
http://xmlsoft.org/sources/
Что-то типа libxml2-2.6.0.tar.gz
Или rpm, если redhat.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 01-Июл-04, 17:37  (MSK)
>Что-то типа libxml2-2.6.0.tar.gz
Гоню, качай 2.6.10. Или 2.6.9, у меня эта версия стоит, работает нормально.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 01-Июл-04, 19:04  (MSK)
>Что-то типа libxml2-2.6.0.tar.gz
>Или rpm, если redhat.

то ли руки не оттуда, то ли с машиной не лады, хотя мож я прсто не знаю чего-то...
Короче.
Скачал *2.6.9.rpm(спасибо), дал команду rpm -i 2.6.9.rpm, вроде всё ок. Говорю gcc parse.c.
Код parse.c:

#include <stdio.h>
#include <libxml/xmlreader.h>

main(){return;}

Получил ответ:parce.c:2:30: libxml/xmlreader.h: No such file or directory

Качаю *tar.gz, распаковываю, ./configure, make, make install.
gcc parse.c - тот же ответ.

Мож что не так делаю?
Подскажи, плиз.

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Помогите!!! Нужен парсер XML на C"
Сообщение от ihor Искать по авторуВ закладки on 01-Июл-04, 20:03  (MSK)
1)
/* ------------- */
#include <stdio.h>
#include "xmlreader.h"

main(){return;}
/* ------------- */
2) gcc -L/path/to/xml/library -I/path/to/xml/includes -o parse parse.c
где /path/to/xml/library -- путь к каталогу, куда стали бинарники библиотеки, а /path/to/xml/includes -- путь, где лежат *.h файлы библиотеки

  Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Июл-04, 11:35  (MSK)
>2) gcc -L/path/to/xml/library -I/path/to/xml/includes -o parse parse.c
>где /path/to/xml/library -- путь к каталогу, куда стали бинарники библиотеки, а /path/to/xml/includes
>-- путь, где лежат *.h файлы библиотеки

Спасибо.
Если можешь скажи, что сие означает?
[root@websitebuilder work]# gcc -L/script/newnew/libxml2-2.6.9/.lib -lxml2 -lz -lpthread -lm -I/script/newnew/libxml2-2.6.9/include -o parse parse.c
/tmp/ccQzm6ow.o(.text+0x48): In function `main':
: undefined reference to `xmlReadMemory'
collect2: ld returned 1 exit status

код

#include <libxml/parser.h>
#include <stdio.h>

static const char * xml = "<results>"
"<result><url>http://ya.ru</url><description>Yandex</description></result>"
"<result><url>http://google.com</url><description>Google</description></result>"
"</results>";

int main (int argc, char * argv[]) {
xmlDocPtr document;
xmlNodePtr root_node, node, child;
char url[1024], description[1024];

LIBXML_TEST_VERSION

document = xmlReadMemory (xml, strlen (xml), "notexist.xml", NULL, 0);
if (!document) {
fprintf (stderr, "Failed to parse...\n");
exit (-1);
}

root_node = xmlDocGetRootElement (document);
// Перебор тегов <result>
for (node = root_node->children; node; node = node->next) {
      // Перебор дочерних тегов
for (child = node->children; child; child = child->next) {
if (!strcmp (child->name, "url"))
strcpy (url, xmlNodeGetContent (child->children));
if (!strcmp (child->name, "description"))
strcpy (description, xmlNodeGetContent (child->children));
}
printf ("%s %s\n", url, description);
}

xmlFreeDoc (document);

xmlCleanupParser ();
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 02-Июл-04, 08:30  (MSK)
1. Попробуй запустить ldconfig, после этого пересобрать и запустить
2. Запусти ldconfig -v и посмотри, где он находит libxml2.so.*
3. Запусти xml2-config --libs --cflags и посмотри, какие он пути "рекомендует". (после -I и -L). Сравни с пунктом 2.

Похоже, что у тебя libxml2 уже стояла, причем версии поменьше... и в другой папке...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Июл-04, 12:04  (MSK)
>1. Попробуй запустить ldconfig, после этого пересобрать и запустить
>2. Запусти ldconfig -v и посмотри, где он находит libxml2.so.*
>3. Запусти xml2-config --libs --cflags и посмотри, какие он пути "рекомендует". (после
>-I и -L). Сравни с пунктом 2.
>
>Похоже, что у тебя libxml2 уже стояла, причем версии поменьше... и в
>другой папке...

Пересобрать и запустить библиотеку, если я тебя правильно понял(в смысле я сделал ldconfig, ./configure, make, make install).
Ничего не изменилось.
Запустил ldconfig -v
Запустил xml2-config --libs --cflags

Пути не совпали. Я указал компилятору, где искать(вроде так)

[root@websitebuilder work]# gcc -L/script/newnew/libxml2-2.6.9/.lib -lxml2 -lz -lpthread -lm -I/script/newnew/libxml2-2.6.9/include -o parse parse.c
/tmp/cc23x99z.o(.text+0x48): In function `main':
: undefined reference to `xmlReadMemory'
collect2: ld returned 1 exit status
[root@websitebuilder work]#

Компилировал твой код. С этой ошибкой парюсь со вчерашнего дня. Тем или иным путём прихожу к ней. Было так же, когда я попытался установть
expat :(((. Пытаюсь скомпилить примеры expat - выскакивает эта ошибка. Если знаешь в чём дело или есть какие нить идеи, скажи, буду признателен за любую помощь.

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 02-Июл-04, 12:30  (MSK)
>Если можешь скажи, что сие означает?
>[root@websitebuilder work]# gcc -L/script/newnew/libxml2-2.6.9/.lib -lxml2 -lz -lpthread -lm -I/script/newnew/libxml2-2.6.9/include -o parse parse.c
Сообщение означает, что линкер не может найти файл библиотеки. Ошибка в том, что ты патаешься
указать компилятору путь к месту, где ты собирал библиотеку. То есть он пытается найти
файл /script/newnew/libxml2-2.6.9/.lib/libxml2.la. Не находит, потому что не .lib, а .libs.
Это-факты. А теперь предположения.
1. libxml2 у тебя уже стояла, но версии более старой. Об этом говорит сообщение
Warning: program compiled against libxml 206 using older 205. При этом она стояла в каталоге
/usr/lib (проверь командой ls /usr/lib/libxml*). В имени файла увидишь версию. Соответственно,
.h лежат в /usr/include.
2. libxml версии 2.6.9 поставилась в каталог /usr/local/lib. .h лежат в /usr/local/include.
Проверить ls /usr/local/lib/libxml*
3. xml2-config у тебя тоже 2 - от старой и от новой. Один в /usr/bin, второй - в /usr/local/bin.
Проверить можно whereis xml2-config.
Одна из функций xml2-config - выдавать правильные ключи для gcc. Если запустить
его с ключами --libs --cflags, как раз оно и получится. Поэтому надо писать не gcc -L... -I... -l...,
а gcc `xml2-config --libs --cflags`. НО! поскольку у тебя в переменной PATH стоит сначала /usr/bin,
а потом - /usr/local/bin, то - вызывается старый xml2-config. Попробуй писать с путем
/usr/local/bin/xml2-config --libs --cflags. Должен указать на /usr/local/lib.
Если мои предположения верны, тебе нужно удалить /usr/bin/xml2-config, /usr/lib/libxml*,
/usr/include/libxml2
а потом запустить ldconfig -v | less и удостовериться, что он нашел библиотеки в /usr/local/lib.
И напиши, помогло или нет... Первый раз телепатом работаю :)
PS ldconfig надо запускать после установки библиотек... любых...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 02-Июл-04, 12:36  (MSK)
>а gcc `xml2-config --libs --cflags`. НО! поскольку у тебя в переменной PATH
>стоит сначала /usr/bin,
>а потом - /usr/local/bin, то - вызывается старый xml2-config. Попробуй писать с
>путем
>/usr/local/bin/xml2-config --libs --cflags. Должен указать на /usr/local/lib.
Возможен еще вариант, что вызывается новый xml2-config, программа компилится с новой версией, а запускается со старой. Лечить так же, удалением старой, запуском ldconfig. И проверь, есть ли у тебя /usr/local/lib в /etc/ld.so.conf
  Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Июл-04, 14:23  (MSK)
>Если мои предположения верны, тебе нужно удалить /usr/bin/xml2-config, /usr/lib/libxml*,
>/usr/include/libxml2
>а потом запустить ldconfig -v | less и удостовериться, что он нашел
>библиотеки в /usr/local/lib.
>И напиши, помогло или нет... Первый раз телепатом работаю :)
>PS ldconfig надо запускать после установки библиотек... любых...

Во первых, хочу тебе сказать, что телепат из тебя хороший, спасибо. Всё как ты сказал. Дейсвительно, была библиотека 2.5.х, было 2 xml2-config(там, где ты сказал) (и ещё один в манах гз ноя так понял - это не важно). Попробовал написать вместо gcc 'xml2-config --xx --xx' gcc '/usr/local/bin/xml2-config --xx --xx' - сказал no such file or directory.
Проверил путь(стыдно за .lib вместо .libs:)) - в этот раз вроде првильный.Удалил по твоему совету файлы. Запустил ldconfig -v | less. Он не нашёл директорию с файлами библиотеки('/usr/local/lib'). Видно не судьба.
Удалил из /usr/local те же файлы, что и из /usr.
Прочитал твоё новое сообщение. Да, запускался новый хмл-конфиг(--version выдал 2.6.9). У меня нет пути /usr/local/lib в етс/ld.so.conf. Думаю добавлять уже смысла нету.
Переустановил библиотеку.
[root@websitebuilder libxml2-2.6.9]# whereis xml2-config
xml2-config: /usr/local/bin/xml2-config /usr/share/man/man1/xml2-config.1.gz
Думаю, есть смысл добавить в етс путь. Добавил.(Почему библиотека не встала в /usr?).
ldconfig -v
Он нашёл путь. Пробую компилить пример(твой).
Скомпилил. Запускаю.
Уррррррррррррррррррррррррраааааааааааааааааааааааааааааааааааааааа!!!!!!
Спасибо те огромное.
Кстати, почему всё-таки библиотека встала в /usr/local а не в /usr?
И ещё, если тебе не жалко, кинь мне своё мыло на jarunda@mail.ru, я тебе своё кину. Вдруг у меня ещё вопросы возникнут, а кто лучше ответит удалённому пользователю чем телепат?;-)). Обещаю не надоедать и не слать рекламу.
Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 02-Июл-04, 15:02  (MSK)
>Кстати, почему всё-таки библиотека встала в /usr/local а не в /usr?
./configure --prefix=/usr
Только зачем?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Июл-04, 15:28  (MSK)
>>Кстати, почему всё-таки библиотека встала в /usr/local а не в /usr?
>./configure --prefix=/usr
>Только зачем?

Просто интересно. Если первая встала в /usr, то логично, на мой взгляд, что если следующей ничто не мешало, то она должна была по умолчанию встать в /usr. Значит, что-то мешало. Интересно, что? Или я не прав?


  Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "Помогите!!! Нужен парсер XML на C"
Сообщение от StingFire Искать по авторуВ закладки(ok) on 02-Июл-04, 16:35  (MSK)
>Просто интересно. Если первая встала в /usr, то логично, на мой взгляд,
>что если следующей ничто не мешало, то она должна была по
>умолчанию встать в /usr. Значит, что-то мешало. Интересно, что? Или я
>не прав?
Она встанет в тот каталог, который ей скажешь, вне зависимости, была там старая версия или нет. По умолчанию (./configure --help) - /usr/local.
А разработчики твоего дистрибутива решили, что ей место в /usr.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Июл-04, 17:37  (MSK)
Почему когда в твоём коде добавляешь строку типа
static const char * xml = "<? xml version \"1.0.\" ?" ...;
он ругается следующими словами
[root@websitebuilder work]# ./parse
notexist.xml:1: parser error : parsing XML declaration: '?>' expected
<?xml version="1.0" ?<results><result><url>http://ya.ru</url><description>Yandex
                    ^
notexist.xml:1: parser error : Extra content at the end of the document
esults><result><url>http://ya.ru</url><description>Yandex</description></result>
                                                                               ^
Failed to parse...

Эта строка встречается в каждом хмл-нике.
Что ему не нравиться? Мож убирать эту строку ручками?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

21. "Помогите!!! Нужен парсер XML на C"
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Июл-04, 18:24  (MSK)
>он ругается следующими словами

Глупый вопрос, извиняюсь. Устал наверное.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

22. "Помогите!!! Нужен парсер XML на (C++) !!!!!!!"
Сообщение от fry Искать по авторуВ закладки on 11-Мрт-05, 13:00  (MSK)
nujen subj
plizzzzzzzzzz
!!!!!!!!!!!!!!!!!!!
  Рекомендовать в FAQ | Cообщить модератору | Наверх

23. "Помогите!!! Нужен парсер XML на (C++) !!!!!!!"
Сообщение от Дениска Искать по авторуВ закладки(??) on 11-Мрт-05, 13:02  (MSK)
expat не подойдет?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

24. "Помогите!!! Нужен парсер XML на (C++) !!!!!!!"
Сообщение от Andrey Искать по авторуВ закладки(??) on 11-Мрт-05, 20:47  (MSK)
>nujen subj
>plizzzzzzzzzz
>!!!!!!!!!!!!!!!!!!!


Я пользовался libxml2, но это на c, а не на си++. Мне тогда помог Тимур(stingfire, кажется). Парсер написал успешно. Если нужна помощь -- пиши.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру