C++ tinyxml2在c+上构建和写入xml文件+;
我正在尝试在VS2019中使用tinyxml2构建一个简单的xml文件, 出于某种原因,代码会一直工作到命中名为port的元素为止。 xml文件中忽略此元素及其后的每个元素。 我刚刚注意到,它也在以错误的顺序编写xml输出,主机应该是下面的那个,而不是端口 我错过了什么 真的,我有大约2天的C++写作经验,还有非常基础的Python知识。C++ tinyxml2在c+上构建和写入xml文件+;,c++,tinyxml2,C++,Tinyxml2,我正在尝试在VS2019中使用tinyxml2构建一个简单的xml文件, 出于某种原因,代码会一直工作到命中名为port的元素为止。 xml文件中忽略此元素及其后的每个元素。 我刚刚注意到,它也在以错误的顺序编写xml输出,主机应该是下面的那个,而不是端口 我错过了什么 真的,我有大约2天的C++写作经验,还有非常基础的Python知识。 #include <iostream> #include <fstream> #include <windows.h> #
#include <iostream>
#include <fstream>
#include <windows.h>
#include <Lmcons.h>
#include <stdlib.h>
#include <filesystem>
#include "tinyxml/tinyxml2.h"
using namespace tinyxml2;
using namespace std;
namespace fs = std::filesystem;
int main()
{
SetConsoleOutputCP(CP_UTF8);
char* appdata;
size_t len;
errno_t err = _dupenv_s(&appdata, &len, "APPDATA");
fs::path path = appdata;
path /= "FileZilla";
path /= "sitemanager.xml";
TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);
tinyxml2::XMLDocument xmlDoc;
//tinyxml2::XMLDeclaration* decl = new XMLDeclaration("1.0", "UTF-8", "");
XMLElement* pRoot = xmlDoc.NewElement("FileZilla3");
pRoot->SetAttribute("Version", "");
pRoot->SetAttribute("Platform", "");
xmlDoc.InsertFirstChild(pRoot);
XMLElement* child = xmlDoc.NewElement("Servers");
child->SetText("\n");
pRoot->InsertEndChild(child);
XMLElement* subchild = xmlDoc.NewElement("Server");
subchild->SetText("\n");
child->InsertEndChild(subchild);
XMLElement* host = xmlDoc.NewElement("host");
host->SetText("ftp.some.url");
subchild->InsertEndChild(host);
XMLElement* port = xmlDoc.NewElement("port");
port->SetText(21);
subchild->InsertEndChild(port);
XMLElement* protocol = xmlDoc.NewElement("Protocol");
protocol->SetText(0);
subchild->InsertEndChild(protocol);
XMLElement* type = xmlDoc.NewElement("type");
type->SetText(0);
subchild->InsertEndChild(type);
XMLElement* user = xmlDoc.NewElement("user");
user->SetText("test");
subchild->InsertEndChild(host);
xmlDoc.SaveFile("SavedData.xml");
cout << path << endl;
std::wcout << username << endl;
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括“tinyxml/tinyxml2.h”
使用名称空间tinyxml2;
使用名称空间std;
名称空间fs=std::filesystem;
int main()
{
设置控制台输出CP(CP_UTF8);
char*appdata;
尺寸透镜;
errno_t err=_dupenv_s(&appdata,&len,“appdata”);
fs::path path=appdata;
path/=“FileZilla”;
path/=“sitemanager.xml”;
TCHAR用户名[UNLEN+1];
DWORD大小=UNLEN+1;
GetUserName((TCHAR*)用户名和大小);
tinyxml2::XMLDocument xmlDoc;
//tinyxml2::XMLDeclaration*decl=新的XMLDeclaration(“1.0”、“UTF-8”);
xmlement*pRoot=xmlDoc.NewElement(“FileZilla3”);
pRoot->SetAttribute(“版本”和“”);
pRoot->SetAttribute(“平台”和“”);
xmlDoc.InsertFirstChild(pRoot);
xmlement*child=xmlDoc.NewElement(“服务器”);
子->设置文本(“\n”);
pRoot->InsertEndChild(child);
xmlement*subchild=xmlDoc.NewElement(“服务器”);
子孩子->设置文本(“\n”);
child->InsertEndChild(子child);
xmlement*host=xmlDoc.NewElement(“主机”);
主机->设置文本(“ftp.some.url”);
子孩子->插入子孩子(主机);
xmlement*port=xmlDoc.NewElement(“端口”);
端口->设置文本(21);
子孩子->插入子孩子(端口);
XMLElement*协议=xmlDoc.NewElement(“协议”);
协议->设置文本(0);
子孩子->插入孩子(协议);
xmlement*type=xmlDoc.NewElement(“类型”);
类型->设置文本(0);
子孩子->插入子孩子(类型);
xmlement*user=xmlDoc.NewElement(“用户”);
用户->设置文本(“测试”);
子孩子->插入子孩子(主机);
SaveFile(“SavedData.xml”);
库特
应该是
XMLElement* user = xmlDoc.NewElement("user");
user->SetText("test");
subchild->InsertEndChild(user);
我很惊讶这个构建,因为InsertEndChild没有使用指针。也许它没有,而您使用的是上一个构建版本?如果您真的想使用指针,也可以切换到LinkedChild。请告诉我这是否有帮助,如果有帮助,我会正确编写。[编辑:结果表明这是错误的,只适用于tinyxml,而不是tinyxml2]
<?xml version="1.0" encoding="UTF-8"?>
<FileZilla3 version="" platform="">
<Servers>
<Server>
<Host>saddf</Host>
<Port>21</Port>
<Protocol>0</Protocol>
<Type>0</Type>
<User>username</User>
<Pass encoding="base64" />
<Logontype>1</Logontype>
<PasvMode>MODE_DEFAULT</PasvMode>
<EncodingType>Auto</EncodingType>
<BypassProxy>0</BypassProxy>
<Name>Ny tjener</Name>
<SyncBrowsing>0</SyncBrowsing>
<DirectoryComparison>0</DirectoryComparison>
</Server>
</Servers>
</FileZilla3>
XMLElement* user = xmlDoc.NewElement("user");
user->SetText("test");
subchild->InsertEndChild(host);
XMLElement* user = xmlDoc.NewElement("user");
user->SetText("test");
subchild->InsertEndChild(user);