сохранение данных в XML'ку

Тема в разделе "WASM.HEAP", создана пользователем cupuyc, 21 дек 2010.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Здравствуйте. Мне интересно как лучше в XML'ку сохранять различные данные. Вот есть, например, массив структур:
    Код (Text):
    1. struct A
    2. {
    3.   int x;
    4.   int y;
    5. };
    6.  
    7. A arr[2];
    мне интересно как лучше этот массив представить в XML'ке? Первое что приходит в голову - давать элементам массива нумерованные имена, типа:
    Код (Text):
    1. <arr size="2">
    2.   <v0 x="1" y="2"/>
    3.   <v1 x="3" y="4"/>
    4. </arr>
    Второе - заюзать неймспейсы.

    Код (Text):
    1. <arr size="2">
    2.   <v xmlns="1" x="1" y="2"/>
    3.   <v xmlns="2" x="3" y="4"/>
    4. </arr>
    Какие ещё есть варианты?
     
  2. MuPoB

    MuPoB New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    3
    Можно ещё так:

    Код (Text):
    1. <arr size="2">
    2.   <A>
    3.     <x>1</x>
    4.     <y>2</y>
    5.   </A>
    6.   <A>
    7.     <x>3</x>
    8.     <y>4</y>
    9.   </A>
    10. </arr>
    Или даже не указывать явно размер <arr size="2">, а определять его в процессе парсинга
     
  3. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    MuPoB, а разве допускаются элементы с одним и тем-же тегом тегом?
     
  4. MuPoB

    MuPoB New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2009
    Сообщения:
    3
    Да, допускаются. Лишь только корневой элемент должен быть один
     
  5. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Пиши на C# .Там есть класс сериалезации\десереалезации в хмл
     
  6. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    _nic, нет, по ТЗ нужно на С++
     
  7. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    Хотя было бы не плохо посмотреть как сериализует различные типы C# и сделать по аналогии. Жаль только, он у меня не установлен. Гляньте, плиз, у кого он есть - как массивы и структуры (или классы) сохраняются?
     
  8. Portman

    Portman New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2008
    Сообщения:
    49
    cupuyc
    сериализуются примерно так, как MuPoB написал
     
  9. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    А еще можно посмотреть на boost::archive, возможно ничего и писать не придется, там есть как раз xml archive:

    // a portable XML archive
    boost::archive::xml_oarchive // saving
    boost::archive::xml_iarchive // loading

    // a portable XML archive which uses wide characters - use for utf-8 output
    boost::archive::xml_woarchive // saving
    boost::archive::xml_wiarchive // loading
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Очень просто, предаёте объект серилезатору и всё. ^)

    З.Ы. С С++ вы такого не достигните, .Net это более высокая ступень развития.
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    cupuyc
    в крайнем случае просто обратитесь к функциям длл которая в дотнете это делает
     
  12. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Передавать нативный объект в функцию, которая сериализует managed объекты? -- Бред.
    Booster

    Ну вот я же говорю, юзайте boost:archive конечно совсем без усилий не получится одной операцией сериализовывать, но учитывая, что все уже в библиотеке есть для сериализации стандартных типов и контейнеров, усилий нужно приложить ну просто минимум, вообще почти ничего не нужно делать =) Зачем изобретать велосипед?