property tree case sensitivity
I'm trying to make all of the strings (xml tags and attributes) contained within a property tree be case insensitive, to make comparison easy and consistent. Here's an example: boost::property_tree::iptree pt; read_xml( file, pt, boost::property_tree::xml_parser::trim_whitespace ); // case insensitive std::string name = v.second.getstd::string("<xmlattr>.nAmE"); // case insensitive BOOST_FOREACH( boost::property_tree::iptree::value_type const& v, pt.get_child("neTwOrK") ) { // fails comparison because "thing" is case sensitive. if ( v.first == "tHiNg" ) { .... } } Is it possible to make v.first case insensitive as well? Thanks, Brad
See here for details on how to make a case insensitive string type:
http://www.gotw.ca/gotw/029.htm
You can then specialise the property tree with this new type:
typedef basic_ptree< ci_string, std::string > ptree;
You can also use boost::iequals for comparing strings ignoring case,
which may or may not be a better solution depending on your
requirements.Regards
Dan
2012/2/7 Brad Tilley
I'm trying to make all of the strings (xml tags and attributes) contained within a property tree be case insensitive, to make comparison easy and consistent.
Here's an example:
boost::property_tree::iptree pt; read_xml( file, pt, boost::property_tree::xml_parser::trim_whitespace );
// case insensitive std::string name = v.second.getstd::string("<xmlattr>.nAmE");
// case insensitive BOOST_FOREACH( boost::property_tree::iptree::value_type const& v, pt.get_child("neTwOrK") ) { // fails comparison because "thing" is case sensitive. if ( v.first == "tHiNg" ) { .... } }
Is it possible to make v.first case insensitive as well?
Thanks,
Brad
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On Feb 8, 5:19 am, Daniel Bradburn
See here for details on how to make a case insensitive string type:http://www.gotw.ca/gotw/029.htm
You can then specialise the property tree with this new type:
typedef basic_ptree< ci_string, std::string > ptree;
You can also use boost::iequals for comparing strings ignoring case, which may or may not be a better solution depending on your requirements.Regards
Dan
Thanks Dan! I wasn't aware of iequals. Combined with iptree, that makes a perfect solution. Brad
participants (2)
-
Brad Tilley
-
Daniel Bradburn