プロジェクト名.Build.cs
PublicDependencyModuleNames に XmlParser を追加してビルド
プロジェクト設定/パッケージ化の Additional Non-Asset Directories to Packageに
Content/ThirdPerson/TextFiles を追加した
XMLのパーステスト |
#include "XmlParser.h" // <- 追加
// OpenStreetMapのxmlファイルを読み込んでパースするテスト
// TestXml1(TEXT("Content/ThirdPerson/TextFiles/map_0001.osm"));
void TestXml1(const FString& path)
{
UE_LOG(LogTemp, Display, TEXT("FPaths::GameDir() %s"), *FPaths::GameDir());
FXmlFile xmlFile;
xmlFile.LoadFile(FPaths::GameDir() + path);
FXmlNode* pRoot = xmlFile.GetRootNode();
if(!pRoot)
{
UE_LOG(LogTemp, Error, TEXT("%s RootNode not found"), *path);
return;
}
UE_LOG(LogTemp, Display, TEXT("RootNode Tag %s"), *(pRoot->GetTag()));
// ルートの子ノードの配列を取得
const TArray<FXmlNode*>& childNode = pRoot->GetChildrenNodes();
for(int i = 0; i < childNode.Num(); i++)
{
const FString& tag = childNode[i]->GetTag();
UE_LOG(LogTemp, Display, TEXT("\tChildNode %d Tag %s"), i, *tag);
if(tag == TEXT("node"))
{
UE_LOG(LogTemp, Display, TEXT("\t\tnode content %s"), *(childNode[i]->GetContent()));
// ノードの属性の配列を取得
const TArray<FXmlAttribute>& attrib = childNode[i]->GetAttributes();
for(auto a : attrib)
{
const FString& tag = a.GetTag();
const FString& value = a.GetValue();
UE_LOG(LogTemp, Display, TEXT("\t\t\t%s = %s"), *tag, *value);
}
}
}
}
|