26 #ifndef TINYXML_INCLUDED
27 #define TINYXML_INCLUDED
30 #pragma warning( disable : 4530 )
31 #pragma warning( disable : 4786 )
41 #if defined( _DEBUG ) && !defined( DEBUG )
45 #if defined( DEBUG ) && defined( _MSC_VER )
47 #define TIXML_LOG OutputDebugString
49 #define TIXML_LOG printf
56 #define TIXML_STRING std::string
57 #define TIXML_ISTREAM std::istream
58 #define TIXML_OSTREAM std::ostream
61 #define TIXML_STRING TiXmlString
62 #define TIXML_OSTREAM TiXmlOutStream
81 void Clear() { row = col = -1; }
133 virtual void Print( FILE* cfile,
int depth )
const = 0;
144 static bool IsWhiteSpaceCondensed() {
return condenseWhiteSpace; }
164 int Row()
const {
return location.row + 1; }
165 int Column()
const {
return location.col + 1; }
178 static const char* SkipWhiteSpace(
const char* );
179 inline static bool IsWhiteSpace(
int c ) {
return ( isspace( c ) || c ==
'\n' || c ==
'\r' ); }
181 virtual void StreamOut (TIXML_OSTREAM *)
const = 0;
184 static bool StreamWhiteSpace( TIXML_ISTREAM * in, TIXML_STRING * tag );
185 static bool StreamTo( TIXML_ISTREAM * in,
int character, TIXML_STRING * tag );
192 static const char* ReadName(
const char* p, TIXML_STRING* name );
197 static const char* ReadText(
const char* in,
199 bool ignoreWhiteSpace,
206 static const char* GetEntity(
const char* in,
char* value );
209 inline static const char* GetChar(
const char* p,
char* _value )
214 return GetEntity( p, _value );
225 static void PutString(
const TIXML_STRING& str, TIXML_OSTREAM* out );
227 static void PutString(
const TIXML_STRING& str, TIXML_STRING* out );
230 static bool StringEqual(
const char* p,
239 TIXML_ERROR_OPENING_FILE,
240 TIXML_ERROR_OUT_OF_MEMORY,
241 TIXML_ERROR_PARSING_ELEMENT,
242 TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME,
243 TIXML_ERROR_READING_ELEMENT_VALUE,
244 TIXML_ERROR_READING_ATTRIBUTES,
245 TIXML_ERROR_PARSING_EMPTY,
246 TIXML_ERROR_READING_END_TAG,
247 TIXML_ERROR_PARSING_UNKNOWN,
248 TIXML_ERROR_PARSING_COMMENT,
249 TIXML_ERROR_PARSING_DECLARATION,
250 TIXML_ERROR_DOCUMENT_EMPTY,
252 TIXML_ERROR_STRING_COUNT
254 static const char* errorString[ TIXML_ERROR_STRING_COUNT ];
262 unsigned int strLength;
268 MAX_ENTITY_LENGTH = 6
271 static Entity entity[ NUM_ENTITY ];
272 static bool condenseWhiteSpace;
293 friend std::istream& operator >> (std::istream& in,
TiXmlNode& base);
311 friend std::ostream& operator<< (std::ostream& out,
const TiXmlNode& base);
314 friend std::string& operator<< (std::string& out,
const TiXmlNode& base );
318 friend TIXML_OSTREAM& operator<< (TIXML_OSTREAM& out,
const TiXmlNode& base);
349 const char *
Value()
const {
return value.c_str (); }
360 void SetValue(
const char * _value) { value = _value;}
364 void SetValue(
const std::string& _value )
366 StringToBuffer buf( _value );
367 SetValue( buf.buffer ? buf.buffer :
"" );
375 TiXmlNode* Parent()
const {
return parent; }
380 TiXmlNode* LastChild()
const {
return lastChild; }
381 TiXmlNode* LastChild(
const char * value )
const;
385 TiXmlNode* LastChild(
const std::string& _value )
const {
return LastChild (_value.c_str ()); }
446 bool RemoveChild(
TiXmlNode* removeThis );
449 TiXmlNode* PreviousSibling()
const {
return prev; }
452 TiXmlNode* PreviousSibling(
const char * )
const;
455 TiXmlNode* PreviousSibling(
const std::string& _value )
const {
return PreviousSibling (_value.c_str ()); }
456 TiXmlNode* NextSibling(
const std::string& _value)
const {
return NextSibling (_value.c_str ()); }
460 TiXmlNode* NextSibling()
const {
return next; }
463 TiXmlNode* NextSibling(
const char * )
const;
485 TiXmlElement* FirstChildElement(
const char * value )
const;
488 TiXmlElement* FirstChildElement(
const std::string& _value )
const {
return FirstChildElement (_value.c_str ()); }
495 virtual int Type()
const {
return type; }
503 bool NoChildren()
const {
return !firstChild; }
514 void SetUserData(
void* user ) { userData = user; }
515 void* GetUserData() {
return userData; }
522 virtual void StreamIn( TIXML_ISTREAM* in, TIXML_STRING* tag ) = 0;
526 TiXmlNode* Identify(
const char* start );
528 target->userData = userData; }
531 TIXML_STRING SValue()
const {
return value ; }
568 TiXmlAttribute(
const std::string& _name,
const std::string& _value )
586 const char*
Name()
const {
return name.c_str (); }
587 const char*
Value()
const {
return value.c_str (); }
602 int QueryDoubleValue(
double* value )
const;
604 void SetName(
const char* _name ) { name = _name; }
605 void SetValue(
const char* _value ) { value = _value; }
612 void SetName(
const std::string& _name )
614 StringToBuffer buf( _name );
615 SetName ( buf.buffer ? buf.buffer :
"error" );
618 void SetValue(
const std::string& _value )
620 StringToBuffer buf( _value );
621 SetValue( buf.buffer ? buf.buffer :
"error" );
630 bool operator==(
const TiXmlAttribute& rhs )
const {
return rhs.name == name; }
631 bool operator<(
const TiXmlAttribute& rhs )
const {
return name < rhs.name; }
632 bool operator>(
const TiXmlAttribute& rhs )
const {
return name > rhs.name; }
641 virtual void Print( FILE* cfile,
int depth )
const;
643 virtual void StreamOut( TIXML_OSTREAM * out )
const;
678 TiXmlAttribute* First()
const {
return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; }
679 TiXmlAttribute* Last()
const {
return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; }
701 firstChild = lastChild = 0;
711 const char*
Attribute(
const char* name )
const;
719 const char*
Attribute(
const char* name,
int* i )
const;
727 const char*
Attribute(
const char* name,
double* d )
const;
738 int QueryDoubleAttribute(
const char* name,
double* value )
const;
743 void SetAttribute(
const char* name,
const char * value );
746 const char*
Attribute(
const std::string& name )
const {
return Attribute( name.c_str() ); }
747 const char*
Attribute(
const std::string& name,
int* i )
const {
return Attribute( name.c_str(), i ); }
750 void SetAttribute(
const std::string& name,
const std::string& _value )
754 if ( n.buffer && v.buffer )
758 void SetAttribute(
const std::string& name,
int _value )
785 virtual void Print( FILE* cfile,
int depth )
const;
791 virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
793 virtual void StreamOut( TIXML_OSTREAM * out )
const;
824 virtual void Print( FILE* cfile,
int depth )
const;
828 virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
830 virtual void StreamOut( TIXML_OSTREAM * out )
const;
861 virtual void Print( FILE* cfile,
int depth )
const;
866 virtual void StreamOut ( TIXML_OSTREAM * out )
const;
876 virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
903 const std::string& _encoding,
904 const std::string& _standalone )
908 encoding = _encoding;
909 standalone = _standalone;
915 const char* _encoding,
916 const char* _standalone );
921 const char * Version()
const {
return version.c_str (); }
923 const char * Encoding()
const {
return encoding.c_str (); }
925 const char * Standalone()
const {
return standalone.c_str (); }
930 virtual void Print( FILE* cfile,
int depth )
const;
935 virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
937 virtual void StreamOut ( TIXML_OSTREAM * out)
const;
945 TIXML_STRING version;
946 TIXML_STRING encoding;
947 TIXML_STRING standalone;
965 virtual void Print( FILE* cfile,
int depth )
const;
968 virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
970 virtual void StreamOut ( TIXML_OSTREAM * out )
const;
996 value = documentName;
1009 bool SaveFile()
const;
1011 bool LoadFile(
const char * filename );
1013 bool SaveFile(
const char * filename )
const;
1015 #ifdef TIXML_USE_STL
1016 bool LoadFile(
const std::string& filename )
1019 return ( f.buffer && LoadFile( f.buffer ));
1021 bool SaveFile(
const std::string& filename )
const
1024 return ( f.buffer && SaveFile( f.buffer ));
1046 const char * ErrorDesc()
const {
return errorDesc.c_str (); }
1085 int TabSize()
const {
return tabsize; }
1093 errorLocation.row = errorLocation.col = 0;
1101 virtual void Print( FILE* cfile,
int depth = 0 )
const;
1103 void SetError(
int err,
const char* errorLocation,
TiXmlParsingData* prevData );
1106 virtual void StreamOut ( TIXML_OSTREAM * out)
const;
1109 #ifdef TIXML_USE_STL
1110 virtual void StreamIn( TIXML_ISTREAM * in, TIXML_STRING * tag );
1116 TIXML_STRING errorDesc;
1213 TiXmlHandle FirstChild(
const char * value )
const;
1217 TiXmlHandle FirstChildElement(
const char * value )
const;
1238 #ifdef TIXML_USE_STL
1239 TiXmlHandle FirstChild(
const std::string& _value )
const {
return FirstChild( _value.c_str() ); }
1240 TiXmlHandle FirstChildElement(
const std::string& _value )
const {
return FirstChildElement( _value.c_str() ); }
1242 TiXmlHandle Child(
const std::string& _value,
int index )
const {
return Child( _value.c_str(), index ); }
1247 TiXmlNode* Node()
const {
return node; }
void ClearError()
Definition: tinyxml.h:1090
virtual const char * Parse(const char *p, TiXmlParsingData *data=0)
Definition: tinyxmlparser.cpp:438
Definition: tinyxml.h:983
void SetTabSize(int _tabsize)
Definition: tinyxml.h:1083
TiXmlNode * LinkEndChild(TiXmlNode *addThis)
Definition: tinyxml.cpp:170
void SetDoubleValue(double value)
Set the value from a double.
Definition: tinyxml.cpp:890
TiXmlDocument * ToDocument() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:505
TiXmlNode * FirstChild() const
The first child of this node. Will be null if there are no children.
Definition: tinyxml.h:377
NodeType
Definition: tinyxml.h:324
TiXmlText * ToText() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:509
bool Error() const
Definition: tinyxml.h:1043
int Column() const
See Row()
Definition: tinyxml.h:165
Definition: tinyxml.h:956
int ErrorRow()
Definition: tinyxml.h:1060
TiXmlComment * ToComment() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:507
static void SetCondenseWhiteSpace(bool condense)
Definition: tinyxml.h:141
Definition: tinyxml.h:1202
void RemoveAttribute(const char *name)
Definition: tinyxml.cpp:370
int QueryIntValue(int *value) const
Definition: tinyxml.cpp:869
int ErrorCol()
The column where the error occured. See ErrorRow()
Definition: tinyxml.h:1061
const char * Value() const
Definition: tinyxml.h:349
const char * Name() const
Return the name of this attribute.
Definition: tinyxml.h:586
Definition: tinyxml.h:282
TiXmlAttribute * FirstAttribute() const
Access the first attribute in this element.
Definition: tinyxml.h:778
TiXmlNode * ReplaceChild(TiXmlNode *replaceThis, const TiXmlNode &withThis)
Definition: tinyxml.cpp:249
const int IntValue() const
Return the value of this attribute, converted to an integer.
Definition: tinyxml.cpp:897
virtual int Type() const
Definition: tinyxml.h:495
void SetName(const char *_name)
Set the name of this attribute.
Definition: tinyxml.h:604
TiXmlNode * IterateChildren(TiXmlNode *previous) const
Definition: tinyxml.cpp:321
virtual void Print(FILE *cfile, int depth) const
Definition: tinyxml.cpp:973
Definition: tinyxml.h:554
TiXmlElement * RootElement() const
Definition: tinyxml.h:1036
Definition: tinyxml.h:118
Definition: tinyxmlparser.cpp:43
void SetIntValue(int value)
Set the value from an integer.
Definition: tinyxml.cpp:883
Definition: tinyxml.h:894
const double DoubleValue() const
Return the value of this attribute, converted to a double.
Definition: tinyxml.cpp:902
virtual void Print(FILE *cfile, int depth) const
Definition: tinyxml.cpp:837
TiXmlUnknown * ToUnknown() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:508
TiXmlAttribute * LastAttribute() const
Access the last attribute in this element.
Definition: tinyxml.h:779
Definition: tinyxml.h:170
int QueryIntAttribute(const char *name, int *value) const
Definition: tinyxml.cpp:508
void SetAttribute(const char *name, const char *value)
Definition: tinyxml.cpp:536
const char * Attribute(const char *name) const
Definition: tinyxml.cpp:469
void SetValue(const char *_value)
Set the value.
Definition: tinyxml.h:605
TiXmlNode * InsertAfterChild(TiXmlNode *afterThis, const TiXmlNode &addThis)
Definition: tinyxml.cpp:223
TiXmlElement * ToElement() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:506
void SetValue(const char *_value)
Definition: tinyxml.h:360
Definition: tinyxml.h:841
void Print() const
Definition: tinyxml.h:1098
virtual void Print(FILE *cfile, int depth) const
Definition: tinyxml.cpp:1026
virtual void Print(FILE *cfile, int depth) const =0
TiXmlNode * InsertBeforeChild(TiXmlNode *beforeThis, const TiXmlNode &addThis)
Definition: tinyxml.cpp:197
TiXmlDeclaration * ToDeclaration() const
Cast to a more defined type. Will return null not of the requested type.
Definition: tinyxml.h:510
Definition: tinyxml.h:669
Definition: tinyxml.h:691
int Row() const
Definition: tinyxml.h:164
TiXmlHandle Child(const char *value, int index) const
Definition: tinyxml.cpp:1204
const char * Value() const
Return the value of this attribute.
Definition: tinyxml.h:587
virtual void Print(FILE *cfile, int depth) const
Definition: tinyxml.cpp:935
TiXmlDocument * GetDocument() const
Definition: tinyxml.cpp:439
virtual void Print(FILE *cfile, int depth) const
Definition: tinyxml.cpp:557
const int ErrorId() const
Definition: tinyxml.h:1051
TiXmlElement * NextSiblingElement() const
Definition: tinyxml.cpp:409
TiXmlHandle ChildElement(const char *value, int index) const
Definition: tinyxml.cpp:1242
bool LoadFile()
Definition: tinyxml.cpp:677
TiXmlNode * InsertEndChild(const TiXmlNode &addThis)
Definition: tinyxml.cpp:187