Files
UnrealEngine/Engine/Source/Runtime/XmlParser/Public/XmlNode.h
2025-05-18 13:04:45 +08:00

109 lines
2.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "Containers/UnrealString.h"
#include "CoreMinimal.h"
/** Forward Decl for implementation */
class FXmlFile;
class FXmlAttribute
{
public:
FXmlAttribute(const FString& InTag, const FString& InValue)
: Tag(InTag)
, Value(InValue)
{
}
/** Gets the tag of the attribute */
XMLPARSER_API const FString& GetTag() const;
/** Gets the value of the attribute */
XMLPARSER_API const FString& GetValue() const;
private:
/** The tag string */
FString Tag;
/** The value string */
FString Value;
};
/** Xml Node representing a line in an xml file */
class FXmlNode
{
friend class FXmlFile;
private:
/** Default ctor, private for FXmlFile use only */
FXmlNode() : NextNode(nullptr) {}
/** No copy ctor allowed */
FXmlNode(const FXmlNode& rhs) {}
/** dtor */
~FXmlNode() { Delete(); }
private:
/** Recursively deletes the nodes for cleanup */
XMLPARSER_API void Delete();
public:
/** Gets the next node in a list of nodes */
XMLPARSER_API const FXmlNode* GetNextNode() const;
/** Gets a list of children nodes */
XMLPARSER_API const TArray<FXmlNode*>& GetChildrenNodes() const;
/** Gets the first child of this node which can be iterated into with GetNextNode */
XMLPARSER_API const FXmlNode* GetFirstChildNode() const;
/** Finds the first child node that contains the specified tag */
XMLPARSER_API const FXmlNode* FindChildNode(const FString& InTag) const;
/** Finds the first child node that contains the specified tag */
XMLPARSER_API FXmlNode* FindChildNode(const FString& InTag);
/** Gets the tag of the node */
XMLPARSER_API const FString& GetTag() const;
/** Gets the value of the node */
XMLPARSER_API const FString& GetContent() const;
/** Sets the new value of the node */
XMLPARSER_API void SetContent(const FString& InContent);
/** Sets the attributes of the node */
XMLPARSER_API void SetAttributes(const TArray<FXmlAttribute>& InAttributes);
/**
* Gets all of the attributes in this node
*
* @return List of attributes in this node
*/
const TArray<FXmlAttribute>& GetAttributes() const
{
return Attributes;
}
/** Gets an attribute that corresponds with the passed-in tag */
XMLPARSER_API FString GetAttribute(const FString& InTag) const;
/**
* Adds a child node to this node
* @param InTag The tag of the child node
* @param InContent (optional) The content of the child node
* @param InAttributes (optional) An array of attributes of the child node
*/
XMLPARSER_API void AppendChildNode(const FString& InTag, const FString& InContent = FString(), const TArray<FXmlAttribute>& InAttributes = TArray<FXmlAttribute>());
private:
/** The list of children nodes */
TArray<FXmlNode*> Children;
/** Attributes of this node */
TArray<FXmlAttribute> Attributes;
/** Tag of the node */
FString Tag;
/** Content of the node */
FString Content;
/** Next pointer */
FXmlNode* NextNode;
};