#ifndef _XMLWRITER_H_ #define _XMLWRITER_H_ #include "FileMan.h" #include #include #include #include #include #include class XMLWriter { public: typedef std::pair attribute_type; public: XMLWriter() : m_iIndentLevel(0) { m_ssBuffer << "\n" ; }; ~XMLWriter() {}; template void addAttributeToNextValue(vfs::String const& attribute, ValueType const& value) { std::stringstream temp_buffer; temp_buffer << value; m_stNextValAttributes.push_back( attribute_type(attribute.utf8(),temp_buffer.str()) ); } template void addValue(vfs::String const& key, ValueType const& value) { std::string utf8key = key.utf8(); m_ssBuffer << indent() << "<" << utf8key; insertAttributesIntoBuffer(); m_ssBuffer << ">" << value << "\n"; } template<> void addValue(vfs::String const& key, std::string const& value) { std::string utf8key = key.utf8(); m_ssBuffer << indent() << "<" << utf8key; insertAttributesIntoBuffer(); m_ssBuffer << ">" << handleSpecialCharacters(value) << "\n"; } void addValue(vfs::String const& key); void addComment(vfs::String const& comment); void addFlag(UINT32 const& flags, UINT32 const& flag, vfs::String strFlag); void openNode(vfs::String const& key); bool closeNode(); bool writeToFile(vfs::Path const& sFileName); bool writeToFile(vfs::tWritableFile* pFile); private: std::string indent(); std::string handleSpecialCharacters(std::string const& str); void insertAttributesIntoBuffer(); private: std::stringstream m_ssBuffer; std::stack m_stOpenNodes; std::vector m_stNextValAttributes; int m_iIndentLevel; }; void testMXLWriter(); #endif // _XMLWRITER_H_