其实这里读取 XML 也是利用了 Tinyxml 来读取 xml ,主要是讲 Tinyxml 放在 UE4 中,遇到的一点点坑
-
先给出 Tinyxml 链接,可以下载他的工程
-
用 UE4 新建一个 C++ 工程,将下图的几个文件添加到 UE4 的工程中
- 并在 Tinyxml 的 cpp 文件中添加本工程的头文件,比如这里是
#include "MatineeProject.h"
- 在 UE4 中的任意 C++ 文件中,Tinyxml 的头文件
#include "tinyxml.h"
#include "tinystr.h"
- 尝试利用 Tinyxml 的接口读取本地 xml ,主要注意一些变量类型的转换,UE4 是自己的一套变量类型,并不适用 Tinyxml
bool ReadXmlFile()
{
// 工程的相对路径+文件名称
FString _FilePath = FPaths::GameDir() + "test.xml";
// 将 TCHAR 转换 char 并转 UTF-8 编码
int32 iLength = WideCharToMultiByte(CP_UTF8, 0, * _FilePath, - 1, NULL, 0, NULL, NULL);
char* path = new char[iLength + 1];
WideCharToMultiByte(CP_UTF8, 0, * _FilePath, - 1, path, iLength, NULL, NULL);
// 创建一个 XML 的文档对象
TiXmlDocument* myDocument = new TiXmlDocument();
if(myDocument->LoadFile(path))
{
// 获得根元素
TiXmlElement *RootElement = myDocument->RootElement();
// 将 char 转为 TCHAR utf-8 编码 支持中文
const char* outchar = RootElement->Value();
iLength = MultiByteToWideChar(CP_UTF8, 0, outchar, strlen(outchar) + 1, NULL, 0);
TCHAR* outTchar = new TCHAR[iLength + 1];
MultiByteToWideChar(CP_UTF8, 0, outchar, strlen(outchar) + 1, outTchar, iLength);
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, outTchar);
return true;
}
else
{
return false;
}
}
- 运行截图,其他的具体操作,google 百度 tinyxml 就可以了