[FEAT]: [XML]: Escaping
This commit is contained in:
@ -35,17 +35,50 @@ namespace IACore
|
||||
return IA_MOVE(doc);
|
||||
}
|
||||
|
||||
String XML::SerializeToString(IN CONST Node &node)
|
||||
String XML::SerializeToString(IN CONST Node &node, IN BOOL escape)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
node.print(oss);
|
||||
return oss.str();
|
||||
return escape ? EscapeXMLString(oss.str()) : oss.str();
|
||||
}
|
||||
|
||||
String XML::SerializeToString(IN CONST Document &doc)
|
||||
String XML::SerializeToString(IN CONST Document &doc, IN BOOL escape)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
doc.save(oss);
|
||||
return oss.str();
|
||||
return escape ? EscapeXMLString(oss.str()) : oss.str();
|
||||
}
|
||||
|
||||
String XML::EscapeXMLString(IN CONST String &xml)
|
||||
{
|
||||
String buffer;
|
||||
buffer.reserve(xml.size() + (xml.size() / 10));
|
||||
|
||||
for (char c : xml)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '&':
|
||||
buffer.append("&");
|
||||
break;
|
||||
case '\"':
|
||||
buffer.append(""");
|
||||
break;
|
||||
case '\'':
|
||||
buffer.append("'");
|
||||
break;
|
||||
case '<':
|
||||
buffer.append("<");
|
||||
break;
|
||||
case '>':
|
||||
buffer.append(">");
|
||||
break;
|
||||
default:
|
||||
buffer.push_back(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
} // namespace IACore
|
||||
@ -31,7 +31,9 @@ namespace IACore
|
||||
STATIC Expected<Document, String> ParseFromString(IN CONST String &data);
|
||||
STATIC Expected<Document, String> ParseFromFile(IN CONST FilePath &path);
|
||||
|
||||
STATIC String SerializeToString(IN CONST Node &node);
|
||||
STATIC String SerializeToString(IN CONST Document &doc);
|
||||
STATIC String SerializeToString(IN CONST Node &node, IN BOOL escape = false);
|
||||
STATIC String SerializeToString(IN CONST Document &doc, IN BOOL escape = false);
|
||||
|
||||
STATIC String EscapeXMLString(IN CONST String &xml);
|
||||
};
|
||||
} // namespace IACore
|
||||
Reference in New Issue
Block a user