// ============================================================== // This file is part of Glest Shared Library (www.glest.org) // // Copyright (C) 2001-2008 Marti�o Figueroa // // You can redistribute this code and/or modify it under // the terms of the GNU General Public License as published // by the Free Software Foundation; either version 2 of the // License, or (at your option) any later version // ============================================================== #ifndef _SHARED_XML_XMLPARSER_H_ #define _SHARED_XML_XMLPARSER_H_ #include #include #include #include "leak_dumper.h" using std::string; using std::vector; namespace XERCES_CPP_NAMESPACE{ class DOMImplementation; class DOMDocument; class DOMNode; class DOMElement; } namespace Shared{ namespace Xml{ const int strSize= 256; class XmlIo; class XmlTree; class XmlNode; class XmlAttribute; // ===================================================== // class XmlIo // /// Wrapper for Xerces C++ // ===================================================== class XmlIo{ private: static bool initialized; XERCES_CPP_NAMESPACE::DOMImplementation *implementation; private: XmlIo(); public: static XmlIo &getInstance(); ~XmlIo(); XmlNode *load(const string &path); void save(const string &path, const XmlNode *node); }; // ===================================================== // class XmlTree // ===================================================== class XmlTree{ private: XmlNode *rootNode; private: XmlTree(XmlTree&); void operator =(XmlTree&); public: XmlTree(); ~XmlTree(); void init(const string &name); void load(const string &path); void save(const string &path); XmlNode *getRootNode() const {return rootNode;} }; // ===================================================== // class XmlNode // ===================================================== class XmlNode{ private: string name; string text; vector children; vector attributes; private: XmlNode(XmlNode&); void operator =(XmlNode&); public: XmlNode(XERCES_CPP_NAMESPACE::DOMNode *node); XmlNode(const string &name); ~XmlNode(); const string &getName() const {return name;} size_t getChildCount() const {return children.size();} size_t getAttributeCount() const {return attributes.size();} const string &getText() const {return text;} XmlAttribute *getAttribute(unsigned int i) const; XmlAttribute *getAttribute(const string &name,bool mustExist=true) const; XmlNode *getChild(unsigned int i) const; XmlNode *getChild(const string &childName, unsigned int childIndex=0) const; bool hasChildAtIndex(const string &childName, int childIndex=0) const; bool hasChild(const string &childName) const; XmlNode *getParent() const; XmlNode *addChild(const string &name); XmlAttribute *addAttribute(const string &name, const string &value); XERCES_CPP_NAMESPACE::DOMElement *buildElement(XERCES_CPP_NAMESPACE::DOMDocument *document) const; private: string getTreeString() const; }; // ===================================================== // class XmlAttribute // ===================================================== class XmlAttribute{ private: string value; string name; private: XmlAttribute(XmlAttribute&); void operator =(XmlAttribute&); public: XmlAttribute(XERCES_CPP_NAMESPACE::DOMNode *attribute); XmlAttribute(const string &name, const string &value); public: const string &getName() const {return name;} const string &getValue() const {return value;} bool getBoolValue() const; int getIntValue() const; int getIntValue(int min, int max) const; float getFloatValue() const; float getFloatValue(float min, float max) const; const string &getRestrictedValue() const; }; }}//end namespace #endif