LINUX.ORG.RU

libxml2 подскажите пример кода Си

 , ,


1

2

Братцы подскажите пожалуйста. Разбираюсь с парсером libxml2. Застрял на одном вопросе. А именно как функции xmlReadFile скормить URL? Если можно кусок кода на Си. Прототип у не такой xmlReadFile (const char * filename, const char * encoding, int options). Если передаю имя файла xml - работает, если даю URL с xml - вылетает с ошибкой «I/O warning : failed to load external entity». Спасибо.


Очевидно, библиотека требует в первом аргументе путь к файлу в файловой системе, а не URI/URL (ибо она не расчитана на это).
Решение - вытаскивать содержимое файла по URL какой-нибудь другой библиотекой (libcurl наверное), и скармливать libxml2 буфер с данными.

kravich ★★★★
()
Последнее исправление: kravich (всего исправлений: 2)
Ответ на: комментарий от WRG

Ага, спасибо. А не подскажите тогда парсер на лету для URL. Типа как feedparser для питона

newmails = int(feedparser.parse("https://" + USERNAME + ":" + PASSWORD + "@mail.google.com/gmail/feed/atom")["feed"]["fullcount"])
только на Си.

salik
() автор топика
Ответ на: комментарий от kravich

Очевидно, библиотека требует в первом аргументе путь к файлу в файловой системе, а не URI/URL (ибо она не расчитана на это).

Вообще-то судя по описанию эта функция должна поддерживать URL:

http://xmlsoft.org/html/libxml-parser.html#xmlReadFile

Предположу, что libxml был как-то не так собран.

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

Посмотрите , что за флаг XML_PARSE_NONET. Судя по исходникам libxml2 он влияет на это.

if ((ctxt != NULL) && (ctxt->options & XML_PARSE_NONET)) {
        int options = ctxt->options;

	ctxt->options -= XML_PARSE_NONET;
        ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
	ctxt->options = options;
	return(ret);
    }
Dead ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.