00001 #ifndef GEAR_MergeXML_H
00002 #define GEAR_MergeXML_H
00003
00004 #include <string>
00005 #include "gearxml/tinyxml.h"
00006
00007 #define NAME_STR "name"
00008
00009 namespace gear {
00010
00011 class TiXmlDocument ;
00012
00018 class MergeXML {
00019
00020 public:
00021
00025 bool setFile1( const std::string& fileName ) ;
00026
00030 bool setFile2( const std::string& fileName ) ;
00031
00036 void makeDominant(const int domFileNr )
00037 {
00038 if (domFileNr==1 || domFileNr==2) {
00039 _domFile = domFileNr ;
00040 }
00041 }
00042
00045 bool mergeFiles (const std::string& fileName ) ;
00046
00049 MergeXML() :
00050 _domFile(2),
00051 _name(NAME_STR) {
00052 }
00053
00054
00055 private:
00056
00057
00058 bool checkXML( const std::string& fileName ) ;
00059
00060
00061 void correctDominantFile() ;
00062
00063
00064 void mergeNode( TiXmlNode* node, TiXmlNode* domNode ) ;
00065
00066
00067 void mergeElement( TiXmlNode* node, TiXmlNode* domNode ) ;
00068
00069
00070 void mergeAttribute( TiXmlElement* element, TiXmlElement* domElement ) ;
00071
00072
00073 int countNodes( TiXmlNode* childNode, TiXmlNode* domNode ) ;
00074
00075
00076 TiXmlNode* getChildNode( TiXmlNode* node, TiXmlNode* domNode, int getOccurence = 1 ) ;
00077
00078
00079 std::string getNodeName( TiXmlNode* node ) ;
00080
00081
00082 bool hasAttribute( TiXmlNode* node ) ;
00083
00084
00085 TiXmlDocument* _file1 ;
00086
00087
00088 TiXmlDocument* _file2 ;
00089
00090
00091 TiXmlDocument* _fileSwap ;
00092
00093
00094 TiXmlDocument* _fileMerged ;
00095
00096
00097 int _domFile ;
00098
00099
00100 char* _name ;
00101
00102 };
00103
00104 }
00105
00106 #endif