gpt4 book ai didi

c++ - 在 C++ 中使用 tinyxml2 读取 xml 文件

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:17 25 4
gpt4 key购买 nike

我不知道如何在 C++ 中使用 tinyxml2 读取这个 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<empleados>
<cantidad>UnaCantidad</cantidad>
<empleado>
<idEmpleado>1</idEmpleado>
<nombre>UnNombre1</nombre>
<apellidos>UnosApellidos1</apellidos>
</empleado>
<empleado>
<idEmpleado>2</idEmpleado>
<nombre>UnNombre2</nombre>
<apellidos>UnosApellidos2</apellidos>
</empleado>
</empleados>

这就是我现在正在做的,没有用:

tinyxml2::XMLDocument xml_doc;

tinyxml2::XMLError eResult = xml_doc.LoadFile(xml_path);
XMLCheckResult(eResult);

tinyxml2::XMLNode* root = xml_doc.FirstChild();
if (root == nullptr) return tinyxml2::XML_ERROR_FILE_READ_ERROR;

tinyxml2::XMLElement* element = root->FirstChildElement("cantidad");
if (element == nullptr) return tinyxml2::XML_ERROR_PARSING_ELEMENT;

int xml_count;
eResult = element->QueryIntText(&xml_count);
XMLCheckResult(eResult);

Empleado* empleados= Empleado[xml_count];

element = root->FirstChildElement("empleado");
Empleado e;
int i = 0;

while (element != nullptr && i < xml_count)
{
tinyxml2::XMLElement* item = element->FirstChildElement("idEmpleado");
int id;
eResult = item->QueryIntText(&id);
XMLCheckResult(eResult);

item = element->FirstChildElement("nombre");
string nombre = item->Gettext();

item = element->FirstChildElement("apellidos");
string apellidos = item->Gettext();

e = Empleado();
e.id = id;
e.nombre = nombre;
e.apellidos = apellidos;
empleados[i] = e;

element = element->NextSiblingElement("empleado");
i++;
}

当我尝试获取第一个 XMLElement (cantidad) 时,我获得了一个 nullptr。我做错了什么,请帮助我...

最佳答案

这是因为 FirstChild 正在为您获取 XML header 。

这是您正在做的事情的一个简化示例:

#include "tinyxml2.h"

bool Test()
{
tinyxml2::XMLDocument xml_doc;

tinyxml2::XMLError eResult = xml_doc.LoadFile("test.xml");
if (eResult != tinyxml2::XML_SUCCESS) return false;

tinyxml2::XMLNode* root = xml_doc.FirstChild();
if (root == nullptr) return false;

tinyxml2::XMLElement* element = root->FirstChildElement("cantidad");
if (element == nullptr) return false;//Fails here

return true;
}

int main()
{
Test();
}

它在指示的地方失败了。这是现在工作的部分:

#include "tinyxml2.h"

bool Test()
{
tinyxml2::XMLDocument xml_doc;

tinyxml2::XMLError eResult = xml_doc.LoadFile("test.xml");
if (eResult != tinyxml2::XML_SUCCESS) return false;

tinyxml2::XMLNode* root = xml_doc.FirstChildElement("empleados");
if (root == nullptr) return false;

tinyxml2::XMLElement* element = root->FirstChildElement("cantidad");
if (element == nullptr) return false;

return true;
}

int main()
{
Test();
}

之所以有效,是因为它不是 FirstChild,而是按名字获取 child 。我不知道其余的;但现在你已经拥有了,你应该从那里没问题。

希望对您有所帮助!

关于c++ - 在 C++ 中使用 tinyxml2 读取 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29435870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com