Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?
И пример кода бы не помешал.
Здравствуйте, Igor Sukhov, Вы писали:
IS>Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки? IS>И пример кода бы не помешал.
в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Igor Sukhov, Вы писали:
IS>>Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки? IS>>И пример кода бы не помешал.
А>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.
я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
Здравствуйте, Igor Sukhov, Вы писали:
А>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat. IS>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
Бери libxml — она приятнее MSXML.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Igor Sukhov, Вы писали:
А>>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat. IS>>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а. C>Бери libxml — она приятнее MSXML.
Здравствуйте, Igor Sukhov, Вы писали:
IS>Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки? IS>И пример кода бы не помешал.
Здравствуйте, Clinch, Вы писали:
C>Здравствуйте, Cyberax, Вы писали:
C>>Здравствуйте, Igor Sukhov, Вы писали:
А>>>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat. IS>>>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а. C>>Бери libxml — она приятнее MSXML.
C>ага, libxml — однозначно
помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2)
на вектор значений <Value>
я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но
вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext
для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Igor Sukhov, Вы писали:
А>>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat. IS>>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а. C>Бери libxml — она приятнее MSXML.
afaik, там xpath с namespaces работает криво. относительные пути не поддерживаются
Здравствуйте, Igor Sukhov, Вы писали:
IS>помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2) IS>на вектор значений <Value>
IS>
IS>я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но IS>вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext IS>для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().
Товарищи, господа активнее пожалуйста, быть в пассиве в наше непростое время ни к чему.
В общем нашел я способ пробежать по всем нодам — используя //Value Xpath запрос и от полученного резалт сета плясать вверх (->parent)
но это же изврат.
Как сделать XPath запрос для всего документа ясно, вопрос — как сделать запрос для какой-то кокретной ноды (по тупому бегать по children
не предалгать)?
Здравствуйте, Igor Sukhov, Вы писали:
IS>Здравствуйте, Igor Sukhov, Вы писали:
IS>>помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2) IS>>на вектор значений <Value>
IS>>
IS>>я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но IS>>вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext IS>>для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().
IS>Товарищи, господа активнее пожалуйста, быть в пассиве в наше непростое время ни к чему. IS>В общем нашел я способ пробежать по всем нодам — используя //Value Xpath запрос и от полученного резалт сета плясать вверх (->parent) IS>но это же изврат.
IS>Как сделать XPath запрос для всего документа ясно, вопрос — как сделать запрос для какой-то кокретной ноды (по тупому бегать по children IS>не предалгать)?
в своё время, похоже, я столкнулся с такой же проблемой, и не смог её решить нормальным способом. пришлось писать лошадиный xpath от рута документа
Здравствуйте, Igor Sukhov, Вы писали:
IS>Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?
Я пробовал делать конфиги на XML и работать с ними через Boost.Serialization, но мне не понравилось — не предназначена она для этого.
Сейчас пользуюсь xerces-ом. Размер бинарников — 2-3 метра, где-то это может и громоздко.
А для XPath можно пользовать xquilla. Это разработка Оракла отданая на опенсорс. Тоже требует 2 метра xerces'а.
Здравствуйте, Igor Sukhov, Вы писали:
IS>>помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2) IS>>на вектор значений <Value>
IS>>
IS>>я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но IS>>вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext IS>>для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().
IS>Товарищи, господа активнее пожалуйста, быть в пассиве в наше непростое время ни к чему. IS>В общем нашел я способ пробежать по всем нодам — используя //Value Xpath запрос и от полученного резалт сета плясать вверх (->parent) IS>но это же изврат.
IS>Как сделать XPath запрос для всего документа ясно, вопрос — как сделать запрос для какой-то кокретной ноды (по тупому бегать по children IS>не предалгать)?
Здравствуйте, Igor Sukhov, Вы писали:
IS>Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++.
В свое время пересмотрел достаточное количество библиотек для XML. Необходимо было кросс-платформенное lightweight решение с поддержкой XPath и низким порогом вхождения (не было времени на вникание в многостраничные доки и примеры). В итоге остановился на PugiXML. Доволен, пользуюсь больше года. Использую в проектах под Win/VC2005 и MacOSX/gcc4.