summaryrefslogtreecommitdiff
path: root/src/utils/xml.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/xml.hpp')
-rw-r--r--src/utils/xml.hpp60
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