+std::string& escape4XML(std::string const& arg, std::string& escaped_string)
+{
+ escaped_string.clear();
+
+ escaped_string+= '"';
+ for (std::string::const_iterator x= arg.begin(), end= arg.end(); x != end; ++x)
+ {
+ unsigned char c= *x;
+ if (c == '&')
+ {
+ escaped_string+= "&";
+ }
+ else if (c == '>')
+ {
+ escaped_string+= ">";
+ }
+ else if (c == '<')
+ {
+ escaped_string+= "<";
+ }
+ else if (c == '\'')
+ {
+ escaped_string+= "'"; break;
+ }
+ else if (c == '"')
+ {
+ escaped_string+= """;
+ }
+ else if (c == ' ')
+ {
+ escaped_string+= ' ';
+ }
+ else if (isalnum(c))
+ {
+ escaped_string+= c;
+ }
+ else
+ {
+ char const* const hexdig= "0123456789ABCDEF";
+ escaped_string+= "&#x";
+ escaped_string+= hexdig[c >> 4];
+ escaped_string+= hexdig[c & 0xF];
+ escaped_string+= ';';
+ }
+ }
+ escaped_string+= '"';
+
+ return escaped_string;
+}
+