在C++中使用TinyXML在用户从openfiledialog中选择的项目之间写入换行符

write the newline between Items which user selected from a openfiledialog using TinyXML in C++

本文关键字:项目 之间 换行符 选择 C++ TinyXML 用户 openfiledialog      更新时间:2023-10-16

我在项目中使用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:UsersPublicPicturesSample PicturesChrysanthemum.jpgC:UsersPublic  PicturesSample PicturesChrysanthemum.jpg
    </images>
    </opencv_storage>

如何在这些名称之间写入换行符?

非常感谢!

更好/更整洁的解决方案是将每个项目存储在自己的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"标记就可以构建完整的列表,而不必担心解析每一行。