Boost & Xml
От: Igor Sukhov  
Дата: 14.12.08 22:53
Оценка:
Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?
И пример кода бы не помешал.

Спасибо.
* thriving in a production environment *
Re: Boost & Xml
От: Аноним  
Дата: 14.12.08 23:31
Оценка: 12 (1)
Здравствуйте, Igor Sukhov, Вы писали:

IS>Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?

IS>И пример кода бы не помешал.

в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.
Re[2]: Boost & Xml
От: Igor Sukhov  
Дата: 15.12.08 00:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Igor Sukhov, Вы писали:


IS>>Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?

IS>>И пример кода бы не помешал.

А>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.


я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
* thriving in a production environment *
Re[3]: Boost & Xml
От: Cyberax Марс  
Дата: 15.12.08 00:18
Оценка: 12 (1)
Здравствуйте, Igor Sukhov, Вы писали:

А>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.

IS>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
Бери libxml — она приятнее MSXML.
Sapienti sat!
Re[4]: Boost & Xml
От: Clinch  
Дата: 15.12.08 08:42
Оценка: 12 (1)
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Igor Sukhov, Вы писали:


А>>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.

IS>>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
C>Бери libxml — она приятнее MSXML.

ага, libxml — однозначно
Re: Boost & Xml
От: vayerx  
Дата: 15.12.08 13:25
Оценка: 13 (2)
Здравствуйте, Igor Sukhov, Вы писали:

IS>Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?

IS>И пример кода бы не помешал.

Easier XML With Boost ( Boost.Serialization )
Re[3]: Boost & Xml
От: Peregrin  
Дата: 15.12.08 17:05
Оценка: 12 (1) +1
Здравствуйте, Igor Sukhov, Вы писали:

IS>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.


Чисто плюсовое решение — Xerces-C++, правда громоздкое достаточно.
Re[5]: Boost & Xml
От: Igor Sukhov  
Дата: 16.12.08 05:25
Оценка:
Здравствуйте, Clinch, Вы писали:

C>Здравствуйте, Cyberax, Вы писали:


C>>Здравствуйте, Igor Sukhov, Вы писали:


А>>>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.

IS>>>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
C>>Бери libxml — она приятнее MSXML.

C>ага, libxml — однозначно



помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2)
на вектор значений <Value>

<Root>
  <Child atr1="val1" atr2="val2">
    <Value>SomeText1</Value>
    <Value>SomeText2</Value>
    <Value>SomeText3</Value>
  </Child>
  <Child atr1="val12" atr2="val22">
    <Value>SomeText4</Value>
    <Value>SomeText5</Value>
    <Value>SomeText6</Value>
  </Child>
</Root>


я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но
вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext
для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().
* thriving in a production environment *
Re[6]: Boost & Xml
От: rusted Беларусь  
Дата: 16.12.08 08:38
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

Есть еще boost::property_tree (http://kaalus.atspace.com/ptree/doc/index.html). Только его еще нужно отдельно скачать из svn boost-а.
Re[4]: Boost & Xml
От: Константин Л. Франция  
Дата: 16.12.08 12:37
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Igor Sukhov, Вы писали:


А>>>в бусте нету. если код только под винду, юзать msxml и не мучаться. иначе можно попробовать TinyXML, expat.

IS>>я думал об MSXML — но думал что есть чисто плюсовое решение чтобы не городить забор из КОМ-а.
C>Бери libxml — она приятнее MSXML.

afaik, там xpath с namespaces работает криво. относительные пути не поддерживаются
libxml xpath
Re[6]: Boost & Xml
От: Igor Sukhov  
Дата: 17.12.08 03:40
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2)

IS>на вектор значений <Value>

IS>
IS><Root>
IS>  <Child atr1="val1" atr2="val2">
IS>    <Value>SomeText1</Value>
IS>    <Value>SomeText2</Value>
IS>    <Value>SomeText3</Value>
IS>  </Child>
IS>  <Child atr1="val12" atr2="val22">
IS>    <Value>SomeText4</Value>
IS>    <Value>SomeText5</Value>
IS>    <Value>SomeText6</Value>
IS>  </Child>
IS></Root>
IS>


IS>я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но

IS>вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext
IS>для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().

Товарищи, господа активнее пожалуйста, быть в пассиве в наше непростое время ни к чему.
В общем нашел я способ пробежать по всем нодам — используя //Value Xpath запрос и от полученного резалт сета плясать вверх (->parent)
но это же изврат.

Как сделать XPath запрос для всего документа ясно, вопрос — как сделать запрос для какой-то кокретной ноды (по тупому бегать по children
не предалгать)?
* thriving in a production environment *
Re[7]: Boost & Xml
От: Константин Л. Франция  
Дата: 17.12.08 06:48
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Здравствуйте, Igor Sukhov, Вы писали:


IS>>помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2)

IS>>на вектор значений <Value>

IS>>
IS>><Root>
IS>>  <Child atr1="val1" atr2="val2">
IS>>    <Value>SomeText1</Value>
IS>>    <Value>SomeText2</Value>
IS>>    <Value>SomeText3</Value>
IS>>  </Child>
IS>>  <Child atr1="val12" atr2="val22">
IS>>    <Value>SomeText4</Value>
IS>>    <Value>SomeText5</Value>
IS>>    <Value>SomeText6</Value>
IS>>  </Child>
IS>></Root>
IS>>


IS>>я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но

IS>>вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext
IS>>для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().

IS>Товарищи, господа активнее пожалуйста, быть в пассиве в наше непростое время ни к чему.

IS>В общем нашел я способ пробежать по всем нодам — используя //Value Xpath запрос и от полученного резалт сета плясать вверх (->parent)
IS>но это же изврат.

IS>Как сделать XPath запрос для всего документа ясно, вопрос — как сделать запрос для какой-то кокретной ноды (по тупому бегать по children

IS>не предалгать)?

в своё время, похоже, я столкнулся с такой же проблемой, и не смог её решить нормальным способом. пришлось писать лошадиный xpath от рута документа
Re: Boost & Xml
От: Adriano  
Дата: 17.12.08 19:17
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Есть ли с Boost специальные библиотеки?


В песочнице есть Boost.xml
Re: Boost & Xml
От: Mazay Россия  
Дата: 18.12.08 11:31
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Достался мне небольшой проект С++ + Boost и надо добавить в него возможность чтения Xml файлов. Т.е. считать, прошерстить XPath запросами и создать коллекцию найденного в памяти. Т.к. последний раз на плюсах я писал наверно лет 5 назад — то почти все забыл. Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++. Есть ли с Boost специальные библиотеки?


Я пробовал делать конфиги на XML и работать с ними через Boost.Serialization, но мне не понравилось — не предназначена она для этого.
Сейчас пользуюсь xerces-ом. Размер бинарников — 2-3 метра, где-то это может и громоздко.
А для XPath можно пользовать xquilla. Это разработка Оракла отданая на опенсорс. Тоже требует 2 метра xerces'а.
Главное гармония ...
Re[7]: Boost & Xml
От: Mazay Россия  
Дата: 18.12.08 11:39
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>>помогите как считать вот такой xml файл и — пробежаться по Child-ам чтобы замепить (ключ — конкатенация атрибутов atr1 и atr2)

IS>>на вектор значений <Value>

IS>>
IS>><Root>
IS>>  <Child atr1="val1" atr2="val2">
IS>>    <Value>SomeText1</Value>
IS>>    <Value>SomeText2</Value>
IS>>    <Value>SomeText3</Value>
IS>>  </Child>
IS>>  <Child atr1="val12" atr2="val22">
IS>>    <Value>SomeText4</Value>
IS>>    <Value>SomeText5</Value>
IS>>    <Value>SomeText6</Value>
IS>>  </Child>
IS>></Root>
IS>>


IS>>я нашед несколько примеров — т.е. я могу вычитать //Root/Child ноды, погу добраться до их атрибутов (через properties) — но

IS>>вот как перебрать <Value> к-е являются детьми <Child> не получается. Потому что не могу понять как создат xmlXPathContext
IS>>для <Child> — для всего документа его можно создать вот этой ф-й xmlXPathNewContext().

IS>Товарищи, господа активнее пожалуйста, быть в пассиве в наше непростое время ни к чему.

IS>В общем нашел я способ пробежать по всем нодам — используя //Value Xpath запрос и от полученного резалт сета плясать вверх (->parent)
IS>но это же изврат.

IS>Как сделать XPath запрос для всего документа ясно, вопрос — как сделать запрос для какой-то кокретной ноды (по тупому бегать по children

IS>не предалгать)?

Ы?
//Child[@atr1="val12"]/Value
Главное гармония ...
Re: Boost & Xml
От: Towiz Украина  
Дата: 22.12.08 12:47
Оценка: 4 (2)
Здравствуйте, Igor Sukhov, Вы писали:

IS>Как лучше и по простому реализовать чтение и парсинг Xml файлов в С++.


В свое время пересмотрел достаточное количество библиотек для XML. Необходимо было кросс-платформенное lightweight решение с поддержкой XPath и низким порогом вхождения (не было времени на вникание в многостраничные доки и примеры). В итоге остановился на PugiXML. Доволен, пользуюсь больше года. Использую в проектах под Win/VC2005 и MacOSX/gcc4.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.