UE4 读取XMl 方法一 继续FFastXml

前端之家收集整理的这篇文章主要介绍了UE4 读取XMl 方法一 继续FFastXml前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前面文正提过,FFastXml 类有一个ParseXmlFile方法可以读取XMl,并且可以设置回调函数,就像前文讲的,如果回调函数中再绑定我们自己的委托(蓝图中叫事件调度器),这样就能干很多事了,至于委托在C++中如何使用,请查看官方博主前面的文章以及官网,这里不做详细介绍。@H_502_2@

回到正题。@H_502_2@

如果要用ParseXmlFile 方法读取XMl,也很简单。@H_502_2@

上步骤:@H_502_2@

1 C++项目中创建一个C++Actor类,或者Component类。@H_502_2@

2添加声明@H_502_2@

bool LoadConfiguration();


//IFastXmlCallback
bool ProcessXmlDeclaration(const TCHAR* ElementData,int32 XmlFileLineNumber);
bool ProcessElement(const TCHAR* ElementName,const TCHAR* ElementData,int32 XmlFileLineNumber);
bool ProcessAttribute(const TCHAR* AttributeName,const TCHAR* AttributeValue);
bool ProcessClose(const TCHAR* Element);
bool ProcessComment(const TCHAR* Comment);
public:
UPROPERTY(BlueprintReadOnly,Category = "MyPlugin")
FString m_IP;@H_502_2@


@H_502_2@

3 CPP文件添加文件@H_502_2@

// xml header
#include "Engine.h"
#include "Runtime/XmlParser/Public/XmlParser.h"
#include "Runtime/XmlParser/Public/FastXml.h"
@H_502_2@


@H_502_2@

4 添加函数定义@H_502_2@



bool AReadXMLActor::LoadConfiguration()
{
FText oOutErrorMessage;
int32 i32ErrorNum;


FString sFilePathName = FPaths::Combine(FPaths::ProjectDir(),TEXT("XML/Setting.xml"));

if (FFastXml::ParseXmlFile((IFastXmlCallback*)this,*sFilePathName,NULL,nullptr,false,oOutErrorMessage,i32ErrorNum))
{
GEngine->AddOnScreenDebugMessage(-1,20.0f,FColor::Yellow,TEXT("Load Setting.xml Successed!"));
return true;
}
else
{
GEngine->AddOnScreenDebugMessage(-1,TEXT("Load Setting.xml Failed!"));
GEngine->AddOnScreenDebugMessage(-1,oOutErrorMessage.ToString());
GEngine->AddOnScreenDebugMessage(-1,sFilePathName);
return false;
}




}


bool AReadXMLActor::ProcessXmlDeclaration(const TCHAR* ElementData,int32 XmlFileLineNumber)
{
UE_LOG(LogEngine,Warning,TEXT("ProcessXmlDeclaration ElementData: %s,XmlFileLineNumber: %f"),ElementData,XmlFileLineNumber);
return true;
}


bool AReadXMLActor::ProcessElement(const TCHAR* ElementName,int32 XmlFileLineNumber)
{
FString sElementName = ElementName;
FString sElementData = ElementData;


if (sElementName == TEXT("IP"))
{
m_IP = ElementData;
}
UE_LOG(LogEngine,TEXT("ProcessElement ElementName: %s,ElementData: %s,ElementName,XmlFileLineNumber);


return true;
}


bool AReadXMLActor::ProcessAttribute(const TCHAR* AttributeName,const TCHAR* AttributeValue)
{
UE_LOG(LogEngine,TEXT("ProcessAttribute AttributeName: %s,AttributeValue: %s"),AttributeName,AttributeValue);
return true;
}


bool AReadXMLActor::ProcessClose(const TCHAR* Element)
{
UE_LOG(LogEngine,TEXT("ProcessClose Element: %s"),Element);
return true;
}


bool AReadXMLActor::ProcessComment(const TCHAR* Comment)
{
UE_LOG(LogEngine,TEXT("ProcessComment Comment: %s"),Comment);
return true;
}
@H_502_2@

5 因为FFastXml::ParseXmlFile((IFastXmlCallback*)this,i32ErrorNum) 中的this 只能在非静态函数中使用,函数前面又不能加static 成为静态函数,因此只能在这个Actor 类 创建的时候调用LoadConfiguration();@H_502_2@


@H_502_2@

6,保存,编译,博主用的4.12版本没问题, 4.18版本 能打开编辑器,一运行就崩溃。 有路过的大神知道错误在哪里的话欢迎留个言告知一下。不胜感激~@H_502_2@

原文链接:https://www.f2er.com/xml/293467.html

猜你在找的XML相关文章