26 #include "../eve-core.h"
28 #include "../log/LogNew.h"
29 #include "../memory/SafeMem.h"
53 if (root ==
nullptr) {
54 sLog.Error(
"XMLParser",
"Unable to find root in '%s'.", file );
63 std::map<std::string, ElementParser*>::const_iterator res =
mParsers.find( element->Value() );
65 sLog.Error(
"XMLParser",
"Unknown element '%s' at line %d.", element->Value(), element->Row() );
69 return res->second->Parse( element );
74 const TiXmlNode* child =
nullptr;
77 while ((child = element->IterateChildren(child))) {
78 if (child->Type() == TiXmlNode::TINYXML_ELEMENT) {
79 const TiXmlElement* childElement = child->ToElement();
80 if ((max > 0) && (max <= count)) {
81 sLog.Error(
"XMLParser",
"Maximal children count %lu exceeded"
82 " in element '%s' at line %d"
83 " by element '%s' at line %d.",
85 element->Value(), element->Row(),
86 childElement->Value(), childElement->Row() );
108 std::map<std::string, ElementParser*>::iterator res =
mParsers.find( name );
bool ParseElement(const TiXmlElement *element) const
Parses element using registered parsers.
bool ParseFile(const char *file)
Parses file using registered parsers.
XMLParser()
Primary constructor.
std::map< std::string, ElementParser * > mParsers
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
#define sLog
Evaluates to a NewLog instance.
This virtual interface must be implemented by all parsers.
virtual ~XMLParser()
A destructor.
std::unique_ptr< TiXmlDocument > m_pXML_Document
void AddParser(const char *name, ElementParser *parser)
Adds a parser.
int64 max(int64 x, int64 y=0)
void RemoveParser(const char *name)
Removes a parser.
void ClearParsers()
Clears all parsers.
bool ParseElementChildren(const TiXmlElement *element, size_t max=0) const
Parses element's children using registered parsers.