C++ 在用户使用C+中的TinyXML从openfiledialog中选择的项目之间写入换行符+;
我在项目中使用TinyXML库生成Xml文件。(C++Visual Studio 2010) 当用户按下浏览按钮时,他/她可以选择多个图片或文件 我想把每个名字都写在一行,但都要放在两个标签之间。我的意思是我希望在输出中包含以下代码:C++ 在用户使用C+中的TinyXML从openfiledialog中选择的项目之间写入换行符+;,c++,newline,filenames,openfiledialog,tinyxml,C++,Newline,Filenames,Openfiledialog,Tinyxml,我在项目中使用TinyXML库生成Xml文件。(C++Visual Studio 2010) 当用户按下浏览按钮时,他/她可以选择多个图片或文件 我想把每个名字都写在一行,但都要放在两个标签之间。我的意思是我希望在输出中包含以下代码: <?xml version="1.0"?> <opencv_storage> <images> ./images/cam01.jpg ./images/cam02.jpg ./ima
<?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>
/图片/cam01.jpg
/图片/cam02.jpg
/图片/cam03.jpg
/图片/cam04.jpg
/图片/cam05.jpg
/图片/cam06.jpg
/图片/cam07.jpg
/图片/cam08.jpg
/图片/cam09.jpg
/图片/cam10.jpg
/图片/cam11.jpg
/图片/cam12.jpg
/图片/cam13.jpg
/图片/cam14.jpg
但是我不知道如何才能在他们之间写下新的一行。
我的代码如下:
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");
}
int NumberOfFile=0;
数组^NamesOfSelectedFiles=gcnew数组(100);
TiXmlDocument文件;
TiXmlElement*味精;
TiXmlDeclaration*dec1=新的TiXmlDeclaration(“1.0”、“1.0”、“1.0”);
文件.LinkedChild(dec1);
TiXmlElement*root=新的TiXmlElement(“opencv_存储”);
document.LinkEndChild(root);
msg=新的TiXmlElement(“图像”);
openFileDialog1->Title=“选择图像文件”;
如果(openFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK)
{
对于每个(openFileDialog1->SafeFileNames中的字符串^file)
{
字符串^orig1=gcnew字符串(openFileDialog1->FileName);
pin_ptr wch1=ptr字符串字符(orig1);
原尺寸1=wcslen(wch1)+1;
const size_t newsize1=100;
大小\u t转换字符1=0;
char nstring1[newsize1];
wcstombs(和转换字符1、nstring1、origsize1、wch1、截断);
TiXmlText*txt=新的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>
C:\Users\Public\Pictures\Sample Pictures\jummy.jpgC:\Users\Public\Pictures\Sample Pictures\jummy.jpg
如何在这些名称之间写换行符
非常感谢你 更好/更简洁的解决方案是将每个项目存储在自己的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>
/图片/cam01.jpg
/图片/cam02.jpg
/图片/cam03.jpg
然后,您只需枚举“image”标记以建立完整列表,而不必担心解析每一行。更好/更简洁的解决方案是将每个项目存储在其自己的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>
/图片/cam01.jpg
/图片/cam02.jpg
/图片/cam03.jpg
然后,您只需枚举“image”标记即可建立完整的列表,而不必担心解析每一行。no它不起作用;)不,它不起作用;)你是说我把每一个都作为一个项目添加?不,我不能,因为我的项目为另一个项目生成输入,我应该按照我编写的代码编写。我无法更改:-)你的意思是我将它们作为一个项目添加?不,我不能,因为我的项目为另一个项目生成输入,我应该按照我编写的代码编写。我不能改变它:-)