Added the improved attribute query
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 5e5b93d..96ec1bf 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1074,6 +1074,17 @@
 }

 

 

+const char* XMLElement::Attribute( const char* name, const char* value ) const

+{ 

+	const XMLAttribute* a = FindAttribute( name ); 

+	if ( !a ) 

+		return 0; 

+	if ( !value || XMLUtil::StringEqual( a->Value(), value ))

+		return a->Value();

+	return 0;

+}

+

+

 const char* XMLElement::GetText() const

 {

 	if ( FirstChild() && FirstChild()->ToText() ) {

diff --git a/tinyxml2.h b/tinyxml2.h
index 6f3828c..e96e471 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -845,8 +845,23 @@
 

 	/** Given an attribute name, Attribute() returns the value

 		for the attribute of that name, or null if none exists.

+		

+		'value' is normally null. However, if specified, the attribute

+		will only be returned if the 'name' and 'value' match. This

+		allow you to write code:

+

+		@verbatim

+		if ( ele->Attribute( "foo", "bar" ) ) callFooIsBar();

+		@endverbatim

+

+		rather than:

+		@verbatim

+		if ( ele->Attribute( "foo" ) ) {

+			if ( strcmp( ele->Attribute( "foo" ), "bar" ) == 0 ) callFooIsBar();

+		}

+		@endverbatim

 	*/

-	const char* Attribute( const char* name ) const	{ const XMLAttribute* a = FindAttribute( name ); if ( !a ) return 0; return a->Value(); }

+	const char* Attribute( const char* name, const char* value=0 ) const;

 

 	/** Given an attribute name, IntAttribute() returns the value

 		of the attribute interpreted as an integer. 0 will be

diff --git a/xmltest.cpp b/xmltest.cpp
index 93b5599..20e3fa9 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -319,6 +319,7 @@
 		ele->QueryIntAttribute( "int", &iVal );

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

 

+		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 );