diff options
Diffstat (limited to 'src/utils/xml.hpp')
-rw-r--r-- | src/utils/xml.hpp | 60 |
1 files changed, 53 insertions, 7 deletions
diff --git a/src/utils/xml.hpp b/src/utils/xml.hpp index e6b618c8..ee37b481 100644 --- a/src/utils/xml.hpp +++ b/src/utils/xml.hpp @@ -1,6 +1,7 @@ /* - * The Mana Server - * Copyright (C) 2004-2010 The Mana World Development Team + * XML utility functions + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers * * This file is part of The Mana Server. * @@ -18,34 +19,79 @@ * along with The Mana Server. If not, see <http://www.gnu.org/licenses/>. */ + #ifndef XML_H #define XML_H -#include <string> #include <libxml/tree.h> -#include "game-server/item.hpp" +#include <string> +/** + * XML helper functions. + */ namespace XML { /** + * A helper class for parsing an XML document, which also cleans it up + * again (RAII). + */ + class Document + { + public: + /** + * Constructor that attempts to load the given file through the + * resource manager. Logs errors. + */ + Document(const std::string &filename, bool useResman = true); + + /** + * Constructor that attempts to load an XML document from memory. + * Does not log errors. + * + * @param data the string to parse as XML + * @param size the length of the string in bytes + */ + Document(const char *data, int size); + + /** + * Destructor. Frees the loaded XML file. + */ + ~Document(); + + /** + * Returns the root node of the document (or NULL if there was a + * load error). + */ + xmlNodePtr rootNode(); + + private: + xmlDocPtr mDoc; + }; + + /** * Gets an integer property from an xmlNodePtr. */ int getProperty(xmlNodePtr node, const char *name, int def); /** + * Gets an floating point property from an xmlNodePtr. + */ + double getFloatProperty(xmlNodePtr node, const char *name, double def); + + /** * Gets a string property from an xmlNodePtr. */ std::string getProperty(xmlNodePtr node, const char *name, const std::string &def); /** - * Gets an floating point property from an xmlNodePtr. + * Finds the first child node with the given name */ - double getFloatProperty(xmlNodePtr node, const char *name, double def); + xmlNodePtr findFirstChildByName(xmlNodePtr parent, const char *name); } #define for_each_xml_child_node(var, parent) \ for (xmlNodePtr var = parent->xmlChildrenNode; var; var = var->next) -#endif +#endif // XML_H |