напишите новую строку между элементами, которые пользователь выбрал из openfiledialog, используя TinyXML в C ++

Я использую в своем проекте библиотеку TinyXML для создания файла Xml. (C ++ Visual Studio 2010)

когда пользователь нажимает кнопку «Обзор», он может выбрать более одного изображения или файла.

Я хочу записать каждое имя в одну строку, но все они должны быть между парой тегов. Я имею в виду, что хочу выводить этот код:

   <?xml version="1.0"?>
    <opencv_storage>
    <images>
    ./images/cam01.jpg
    ./images/cam02.jpg
    ./images/cam03.jpg
    ./images/cam04.jpg
    ./images/cam05.jpg
    ./images/cam06.jpg
    ./images/cam07.jpg
    ./images/cam08.jpg
    ./images/cam09.jpg
    ./images/cam10.jpg
    ./images/cam11.jpg
    ./images/cam12.jpg
    ./images/cam13.jpg
    ./images/cam14.jpg
    </images>
    </opencv_storage>

но я не знаю, как мне написать новую строку между ними. по моему коду здесь:

int NumberOfFile = 0;
  array<String^>^ NamesOfSelectedFiles = gcnew array<String^>(100);

  TiXmlDocument document; 
  TiXmlElement* msg;
  TiXmlDeclaration* dec1 = new TiXmlDeclaration("1.0","","");
  document.LinkEndChild(dec1);

  TiXmlElement * root = new TiXmlElement( "opencv_storage" );  
  document.LinkEndChild( root ); 
  msg = new TiXmlElement("images");

  openFileDialog1->Title = "Select an Image file";

 if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)

  {
     for each (String^ file in openFileDialog1->SafeFileNames)
         {
            String ^orig1 = gcnew String(openFileDialog1->FileName);
             pin_ptr<const wchar_t> wch1 = PtrToStringChars(orig1);
             size_t origsize1 = wcslen(wch1) + 1;
             const size_t newsize1 = 100;
             size_t convertedChars1 = 0;
             char nstring1[newsize1];
         wcstombs_s(&convertedChars1, nstring1, origsize1, wch1, _TRUNCATE);

         TiXmlText* txt = new TiXmlText(nstring1);
         msg->LinkEndChild(txt);
         }
              root->LinkEndChild(msg);


          document.SaveFile("VID5.xml");

     }

по этому коду я создаю такой файл:

 <?xml version="1.0" ?>
    <opencv_storage>
    <images>C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpgC:\Users\Public  \Pictures\Sample Pictures\Chrysanthemum.jpg
    </images>
    </opencv_storage>

Как я могу написать символ новой строки между этими именами?

большое спасибо!


person Golnaz Saraji    schedule 11.08.2013    source источник
comment
нет, это не работает ;)   -  person Golnaz Saraji    schedule 11.08.2013


Ответы (1)


Лучшим / более аккуратным решением было бы хранить каждый элемент в собственном XML-элементе, например:

   <?xml version="1.0"?>
    <opencv_storage>
    <images>
     <image>./images/cam01.jpg</image>
     <image>./images/cam02.jpg</image>
     <image>./images/cam03.jpg</image>
    </images>
    </opencv_storage>

Затем вам просто нужно перечислить теги «image», чтобы составить полный список, не беспокоясь о синтаксическом анализе каждой отдельной строки.

person Jonathan Potter    schedule 11.08.2013
comment
вы имеете в виду, что я добавляю каждый из них как элемент? нет, я не могу, так как мой проект производит входные данные для другого проекта, я должен писать как код, который я написал. Я не могу это изменить :-) - person Golnaz Saraji; 11.08.2013