Add the (very handy) QueryAttribute
diff --git a/tinyxml2.h b/tinyxml2.h
index bd504fc..a40178c 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -1224,7 +1224,45 @@
         return a->QueryFloatValue( value );

     }

 

-    /// Sets the named attribute to value.

+	

+    /** Given an attribute name, QueryAttribute() returns

+    	XML_NO_ERROR, XML_WRONG_ATTRIBUTE_TYPE if the conversion

+    	can't be performed, or XML_NO_ATTRIBUTE if the attribute

+    	doesn't exist. It is overloaded for the primitive types,

+		and is a generally more convenient replacement of

+		QueryIntAttribute() and related functions.

+		

+		If successful, the result of the conversion

+    	will be written to 'value'. If not successful, nothing will

+    	be written to 'value'. This allows you to provide default

+    	value:

+

+    	@verbatim

+    	int value = 10;

+    	QueryAttribute( "foo", &value );		// if "foo" isn't found, value will still be 10

+    	@endverbatim

+    */

+	int QueryAttribute( const char* name, int* value ) const {

+		return QueryIntAttribute( name, value );

+	}

+

+	int QueryAttribute( const char* name, unsigned int* value ) const {

+		return QueryUnsignedAttribute( name, value );

+	}

+

+	int QueryAttribute( const char* name, bool* value ) const {

+		return QueryBoolAttribute( name, value );

+	}

+

+	int QueryAttribute( const char* name, double* value ) const {

+		return QueryDoubleAttribute( name, value );

+	}

+

+	int QueryAttribute( const char* name, float* value ) const {

+		return QueryFloatAttribute( name, value );

+	}

+

+	/// Sets the named attribute to value.

     void SetAttribute( const char* name, const char* value )	{

         XMLAttribute* a = FindOrCreateAttribute( name );

         a->SetAttribute( value );

diff --git a/xmltest.cpp b/xmltest.cpp
index 24a68bd..c654348 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -505,8 +505,8 @@
 

 		XMLElement* ele = doc.FirstChildElement();

 

-		int iVal;

-		double dVal;

+		int iVal, iVal2;

+		double dVal, dVal2;

 

 		ele->SetAttribute( "str", "strValue" );

 		ele->SetAttribute( "int", 1 );

@@ -516,10 +516,15 @@
 		ele->QueryIntAttribute( "int", &iVal );

 		ele->QueryDoubleAttribute( "double", &dVal );

 

+		ele->QueryAttribute( "int", &iVal2 );

+		ele->QueryAttribute( "double", &dVal2 );

+

 		XMLTest( "Attribute match test", ele->Attribute( "str", "strValue" ), "strValue" );

 		XMLTest( "Attribute round trip. c-string.", "strValue", cStr );

 		XMLTest( "Attribute round trip. int.", 1, iVal );

 		XMLTest( "Attribute round trip. double.", -1, (int)dVal );

+		XMLTest( "Alternate query", true, iVal == iVal2 );

+		XMLTest( "Alternate query", true, dVal == dVal2 );

 	}

 

 	{