在C++中使用tinyxml2读取一个xml文件
Read an xml file using tinyxml2 in C++
我不知道如何在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标头。
以下是您正在做的事情的简化示例:
#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,而是通过名称获取子项。其余的我不知道;但现在你有了,你应该从那里开始就没事了。
希望能有所帮助!
相关文章:
- 挂起和取消挂起一个文件DLL
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何将class.cpp和class.hpp编译为一个.o文件
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 如何从整个磁盘中排除要装载的一个文件
- 如何将模板和非模板函数放在一个文件中
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何在标准c ++中流式传输/读取二进制文件的中间部分并写入另一个文件?