Quellcode durchsuchen

attribute support

Lee Thomason vor 14 Jahren
Ursprung
Commit
22aead1c73
4 geänderte Dateien mit 12 neuen und 4 gelöschten Zeilen
  1. 7 2
      tinyxml2.cpp
  2. 1 0
      tinyxml2.h
  3. BIN
      tinyxml2.suo
  4. 4 2
      xmltest.cpp

+ 7 - 2
tinyxml2.cpp

@@ -288,6 +288,9 @@ char* XMLComment::ParseDeep( char* p )
 // --------- XMLAttribute ---------- //
 char* XMLAttribute::ParseDeep( char* p )
 {
+	p = ParseText( p, &name, "=" );
+	if ( !p || !*p ) return 0;
+
 	char endTag[2] = { *p, 0 };
 	++p;
 	p = ParseText( p, &value, endTag );
@@ -298,7 +301,8 @@ char* XMLAttribute::ParseDeep( char* p )
 
 void XMLAttribute::Print( FILE* cfile )
 {
-	fprintf( cfile, "\"%s\"", value );
+	// fixme: sort out single vs. double quote
+	fprintf( cfile, "%s=\"%s\"", name.GetStr(), value.GetStr() );
 }
 
 
@@ -351,7 +355,7 @@ char* XMLElement::ParseDeep( char* p )
 		}
 
 		// attribute.
-		if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) {
+		if ( IsAlpha( *p ) ) {
 			XMLAttribute* attrib = new XMLAttribute( this );
 			p = attrib->ParseDeep( p );
 			if ( !p ) {
@@ -459,6 +463,7 @@ bool XMLDocument::Parse( const char* p )
 	charBuffer = CharBuffer::Construct( p );
 	XMLNode* node = 0;
 	
+	// fixme: clean up
 	char* q = Identify( this, charBuffer->mem, &node );
 	while ( node ) {
 		root->InsertEndChild( node );

+ 1 - 0
tinyxml2.h

@@ -169,6 +169,7 @@ public:
 private:
 	char* ParseDeep( char* p );
 
+	StrPair name;
 	StrPair value;
 	XMLAttribute* next;
 };

BIN
tinyxml2.suo


+ 4 - 2
xmltest.cpp

@@ -28,13 +28,15 @@ int main( int argc, const char* argv )
 	}
 #endif
 	{
-		static const char* test[] = {	"<!--single element-->",
+		static const char* test[] = {	//"<!--single element-->",
 										"<element />",
 									    "<element></element>",
-										"<!--single sub-element-->",
+										//"<!--single sub-element-->",
 									    "<element><subelement/></element>",
 									    "<element><subelement></subelement></element>",
 									    "<!--comment beside elements--><element><subelement></subelement></element>",
+									    "<!--comment beside elements, this time with spaces-->  \n <element>  <subelement> \n </subelement> </element>",
+									    "<element attrib1='foo' attrib2=\"bar\" ></element>",
 										0
 		};
 		for( int i=0; test[i]; ++i ) {