00001 // XML_Util.cpp,v 1.1 2005/05/23 18:10:38 michel_j Exp 00002 00003 #include "ACEXML/common/XML_Util.h" 00004 00005 static const ACEXML_Char ESCAPED_AMP[] = ACE_TEXT("&"); 00006 static const ACEXML_Char ESCAPED_LESS[] = ACE_TEXT("<"); 00007 static const ACEXML_Char ESCAPED_GREATER[] = ACE_TEXT(">"); 00008 static const ACEXML_Char ESCAPED_APOS[] = ACE_TEXT("'"); 00009 static const ACEXML_Char ESCAPED_QUOTE[] = ACE_TEXT("""); 00010 00011 #define CSTRLEN(x) ((sizeof(x) / sizeof(ACEXML_Char)) - 1) 00012 00013 ACEXML_String ACEXML_escape_string(const ACEXML_String& str) 00014 { 00015 ACEXML_String ret(str.length ()); 00016 ACEXML_escape_string(str, ret); 00017 return ret; 00018 } 00019 00020 void ACEXML_escape_string(const ACEXML_String& in, ACEXML_String& out) 00021 { 00022 size_t len = in.length (); 00023 out.clear(); 00024 for (size_t stridx = 0; stridx < len; ++stridx) 00025 { 00026 switch (in[stridx]) { 00027 case '&': 00028 out.append(ESCAPED_AMP, CSTRLEN(ESCAPED_AMP)); 00029 break; 00030 case '<': 00031 out.append(ESCAPED_LESS, CSTRLEN(ESCAPED_LESS)); 00032 break; 00033 case '>': 00034 out.append(ESCAPED_GREATER, CSTRLEN(ESCAPED_GREATER)); 00035 break; 00036 case '\'': 00037 out.append(ESCAPED_APOS, CSTRLEN(ESCAPED_APOS)); 00038 break; 00039 case '\"': 00040 out.append(ESCAPED_QUOTE, CSTRLEN(ESCAPED_QUOTE)); 00041 break; 00042 default: 00043 out += in[stridx]; 00044 } 00045 } 00046 }