Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > XML сервер


Автор: qpharm 25.1.2008, 11:20
Требуется, что С++ программа генерировала HTML (XML) файлы, чтобы ее вывод можно было просматривать любым браузером (html - сервер).
С помощью каких инструментов (библиотек) можно это сделать проще?

Автор: Fazil6 25.1.2008, 11:45
Цитата(qpharm @  25.1.2008,  10:20 Найти цитируемый пост)
С помощью каких инструментов (библиотек) можно это сделать проще?

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

std::ostringstream s;
s << "<font>" << x << "</font>" ;

Автор: Lazin 25.1.2008, 11:47
то-есть это CGI?
tinyxml - имхо самый простой вариант... а вообще любая библиотека позволяющая работать с DOM

Автор: Любитель 26.1.2008, 11:59
Цитата(qpharm @  25.1.2008,  11:20 Найти цитируемый пост)
html - сервер

Странное понятие... Может речь про реализацию HTTP-сервера?

Автор: jonie 26.1.2008, 18:10
Цитата

а вообще любая библиотека позволяющая работать с DOM
SAX нынче не в моде видимо ....

если просто выводить то достаточно SAX парсеров, а то и просто вывода без всяких наворотов... надо точнее ставить задачи

Автор: chipset 26.1.2008, 22:17
АФАИР, ТиниХМЛ плохо поддерживает ДОМ и запись вообше. Просто записать ХМЛ СТЛом гораздо проше велосипедом.

Автор: Ulysses4j 26.1.2008, 23:18
В промышленных масштабах дле генерации любой разметки используются http://en.wikipedia.org/wiki/Template_engine_(web) (Velocity, FreeMarker, JSP, Smarty), но для С++ таковых я не знаю (и это, очевидно, потому что редко С++ применяется для решения таких задач в промышленных масштабах); однако, это не значит, что их нет вообще  — гугл в помощь. Руками проще — это да, особенно, если нужен только HTML (XHTML). Хорошая библиотека для работы с XML, как говорят, Apache Xerces.

Автор: Fazil6 26.1.2008, 23:58
Цитата(Ulysses4j @  26.1.2008,  22:18 Найти цитируемый пост)
 Хорошая библиотека для работы с XML, как говорят, Apache Xerces

хорошая, бесплатная, качественная и т.д и т.п - libxml2

http://xmlsoft.org/index.html

Автор: archimed7592 27.1.2008, 00:30
Fazil6, ты имел дело и с Xerces и c libxml2? Передо мной сейчас дилема, что выбрать - если не сложно, можно в двух словах плюсы/минусы обоих?

Автор: qpharm 29.1.2008, 12:06
Цитата(Ulysses4j @  26.1.2008,  23:18 Найти цитируемый пост)
В промышленных масштабах дле генерации любой разметки используются шаблонные движки (Velocity, FreeMarker, JSP, Smarty), но для С++ таковых я не знаю (и это, очевидно, потому что редко С++ применяется для решения таких задач в промышленных масштабах); однако, это не значит, что их нет вообще  — гугл в помощь. Руками проще — это да, особенно, если нужен только HTML (XHTML). Хорошая библиотека для работы с XML, как говорят, Apache Xerces.


Полезный ответ. Большое спасибо.

Автор: Fazil6 29.1.2008, 12:30
Цитата(archimed7592 @  26.1.2008,  23:30 Найти цитируемый пост)
Fazil6, ты имел дело и с Xerces и c libxml2? Передо мной сейчас дилема, что выбрать - если не сложно, можно в двух словах плюсы/минусы обоих?

точно не помню рассматривал ли я Xerces, но тему пробивал и варианты были. Я рассматривал несколько библиотек и какие именно точно не помню кроме микрософтовской, но выбрал libxml2 потому как мне она показалась наиболее простой и понятной в использовании имея все необходимые возможности, кросплатформенность и к тому же о ней хорошие отзывы. 
Правда когда передо мной вопрос стоял я не сильно шибко в самом XML разбирался и может быть я не совсем объективно оценивал, но ни разу не пожалел, что с ней связался. Хорошая дока, с примерами, сайт толковый - короче у меня никаких претензий. 
Сама либа на С.

Добавлено через 3 минуты и 44 секунды
из минусов могу предложить тока то, что оно работает исключительно с UTF-8 и как правило перед передачей парсеру и после получения от него нужно перекодировать, если скажем работаем с СР1251, но есть iconv и для меня лично это особым неудобством не является

Автор: archimed7592 29.1.2008, 13:07
Цитата(Fazil6 @  29.1.2008,  12:30 Найти цитируемый пост)
из минусов могу предложить тока то, что оно работает исключительно с UTF-8 и как правило перед передачей парсеру и после получения от него нужно перекодировать, если скажем работаем с СР1251, но есть iconv и для меня лично это особым неудобством не является 

Да, да... Уже успел столкнуться с этим, правда, сквозь PHP/DOM... Не очень приятная особенность на самом деле...

Автор: Ulysses4j 29.1.2008, 13:59
Цитата(Fazil6 @  29.1.2008,  13:30 Найти цитируемый пост)
кросплатформенность

НУ, сегодня любая приличная C/C++-библиотека хорошо переносима на уровне исходников (надо только уметь собирать ее из этих исходников под разные платформы ;))

Цитата(Fazil6 @  29.1.2008,  13:30 Найти цитируемый пост)
Сама либа на С.

В отличие от Xerces, которая С++: классы и виртуальные функции — все радости жизни.

По поводу кодировок. Ограничения libxml проистекают из того, что распарсенные данные, в какой бы кодировке они ни были представлены изначально, кодируются во внутреннем предаставлении в UTF-8. Причины этого решения http://xmlsoft.org/encoding.html на оф. сайте и мягко говоря не кажутся внятными, лично у меня такое ощущение, что товарищи решили облегчить себе жизнь при реализации библиотеки. Насколько я знаю, с Xerces ничего подобного нет.

Хотя я предпочитаю использовать в xml UTF-8 =) но не всегда же приходится парсить свои документы...

Автор: Любитель 29.1.2008, 14:59
Цитата(Ulysses4j @  29.1.2008,  13:59 Найти цитируемый пост)
Насколько я знаю, с Xerces ничего подобного нет.

В ксерцез нуль-строки в утф-16 (XMLCh*). Для парсера и райтера можно, конечо, задать энкодинг (для парсера обычно он берётся с документа). Всё-таки я бы предпочёл ОО-дизайн xerces. Да и поддержка последних спецификаций. Доки не идеальны, но есть неплохие экзамплы.

Добавлено через 29 секунд
ЗЫ С libxml толком не работал - только смотрел. Не пошло... smile

Автор: archimed7592 29.1.2008, 15:04
Xerces дружит с ICU?

Автор: Любитель 29.1.2008, 15:21
А кака "дружба" тебе нужна? Чего-т я не понял smile

Автор: archimed7592 30.1.2008, 15:08
Цитата(Любитель @  29.1.2008,  15:21 Найти цитируемый пост)
А кака "дружба" тебе нужна? Чего-т я не понял smile

А я пока сам не знаю smile. Просто в PHP я имел некоторые performance issues в связи с необходимостью постоянно перекодировать в UTF-8 и обратно. Вообще не понимаю, зачем нужен UTF-8, кроме как для окончательного представления текста и т.к. libxml2 не работает ни с чем, кроме как UTF-8, она мне видимо не подойдёт.
Сейчас меня вполне устраивает дружба QDomXxx и QString, но слишком уж ограниченный DOM у Qt'шников. Хотя... смотрел 4.4-tp1 - там вроде как появился XPath и прочие вкусности, но, это надо проверить более детально.

Автор: Любитель 30.1.2008, 15:40
Цитата(archimed7592 @  30.1.2008,  15:08 Найти цитируемый пост)
там вроде как появился XPath и прочие вкусности

Да 4.4 в плане XML очень радует smile Ждём релиза...

Цитата(archimed7592 @  30.1.2008,  15:08 Найти цитируемый пост)
Просто в PHP я имел некоторые performance issues в связи с необходимостью постоянно перекодировать в UTF-8 и обратно.

XercesC выдаёт/получает строки как утф-16 (в C-style), без вариантов. Есть всякие XMLString::transcode + куча функций обработки (статик-методы класса XMLString). Кстати, XMLString - достаточно странная вещь. Класс, с онли статик-мемебрами (почему не неймспейс?) для обработки XMLCh*. Вот так.

QString ведь тоже внутренне на утф16 основан - я не понял, чем это плохо?

Автор: archimed7592 30.1.2008, 16:53
Цитата(Любитель @  30.1.2008,  15:40 Найти цитируемый пост)
QString ведь тоже внутренне на утф16 основан - я не понял, чем это плохо? 

UTF-16 - это хорошо smile. UTF-32 конечно ещё лучше, но, если прикрыть глаза на всякую муть аля "в UTF-16 некоторые code points будут представляться несколькими символами", то золотой серидиной будет именно UTF-16.
Минусы UTF-8 я совсем недавно уже упоминал... самый главный: необходимость делать лишние действия, а если забудешь их сделать можно нарваться на весьма пренеприятные последствия. Да и зачем их делать, когда можно не делать smile.
Минус UTF-32 - часто неоправданный перерасход памяти.

Автор: jonie 30.1.2008, 17:58
UTF16 и UCS-2 разные вещи

Автор: archimed7592 30.1.2008, 18:01
Цитата(jonie @  30.1.2008,  17:58 Найти цитируемый пост)
UTF16 и UCS-2 разные вещи 

Кто-то где-то утверждал обратное? 0_о

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)