C++ tinyxml2在c+上构建和写入xml文件+;

C++ tinyxml2在c+上构建和写入xml文件+;,c++,tinyxml2,C++,Tinyxml2,我正在尝试在VS2019中使用tinyxml2构建一个简单的xml文件, 出于某种原因,代码会一直工作到命中名为port的元素为止。 xml文件中忽略此元素及其后的每个元素。 我刚刚注意到,它也在以错误的顺序编写xml输出,主机应该是下面的那个,而不是端口 我错过了什么 真的,我有大约2天的C++写作经验,还有非常基础的Python知识。 #include <iostream> #include <fstream> #include <windows.h> #

我正在尝试在VS2019中使用tinyxml2构建一个简单的xml文件, 出于某种原因,代码会一直工作到命中名为port的元素为止。 xml文件中忽略此元素及其后的每个元素。 我刚刚注意到,它也在以错误的顺序编写xml输出,主机应该是下面的那个,而不是端口

我错过了什么

真的,我有大约2天的C++写作经验,还有非常基础的Python知识。
#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);