xml_escape_parser.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00013 #include <string>
00014 #include "xml_escape_parser.hpp"
00015
00016 namespace iobind{
00017 namespace parser{
00018
00019 std::string xml_escape_parser::escape(const std::string &istr) const
00020 {
00021 size_t i;
00022 std::string str = istr;
00023 i = str.find_first_of("<>&'\"");
00024 while (i != std::string::npos)
00025 {
00026 switch (str[i])
00027 {
00028 case '<': str.replace(i, 1, "<"); i += 3; break;
00029 case '>': str.replace(i, 1, ">"); i += 3; break;
00030 case '&': str.replace(i, 1, "&"); i += 4; break;
00031 case '\'': str.replace(i, 1, "'"); i += 5; break;
00032 case '"': str.replace(i, 1, """); i += 5; break;
00033 }
00034 i = str.find_first_of("<>&'\"", i + 1);
00035 }
00036 return str;
00037 }
00038
00039 std::string xml_escape_parser::unescape(const std::string &istr) const
00040 {
00041 size_t i;
00042 std::string str = istr;
00043 i = str.find_first_of("&");
00044 while (i != std::string::npos)
00045 {
00046 if (str[i] == '&')
00047 {
00048 if (!str.compare(i + 1, 3, "lt;"))
00049 str.replace(i, 4, 1, '<');
00050 else if (!str.compare(i + 1, 3, "gt;"))
00051 str.replace(i, 4, 1, '>');
00052 else if (!str.compare(i + 1, 4, "amp;"))
00053 str.replace(i, 5, 1, '&');
00054 else if (!str.compare(i + 1, 5, "apos;"))
00055 str.replace(i, 6, 1, '\'');
00056 else if (!str.compare(i + 1, 5, "quot;"))
00057 str.replace(i, 6, 1, '"');
00058 }
00059 i = str.find_first_of("&", i + 1);
00060 }
00061 return str;
00062 }
00063 };
00064 };