[FEAT]: [XML]: Escaping

This commit is contained in:
2025-12-18 15:44:29 +05:30
parent 196bcc0c22
commit e8ee319175
2 changed files with 41 additions and 6 deletions

View File

@ -35,17 +35,50 @@ namespace IACore
return IA_MOVE(doc); return IA_MOVE(doc);
} }
String XML::SerializeToString(IN CONST Node &node) String XML::SerializeToString(IN CONST Node &node, IN BOOL escape)
{ {
std::ostringstream oss; std::ostringstream oss;
node.print(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; std::ostringstream oss;
doc.save(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("&lt;");
break;
case '>':
buffer.append("&gt;");
break;
default:
buffer.push_back(c);
break;
}
}
return buffer;
} }
} // namespace IACore } // namespace IACore

View File

@ -31,7 +31,9 @@ namespace IACore
STATIC Expected<Document, String> ParseFromString(IN CONST String &data); STATIC Expected<Document, String> ParseFromString(IN CONST String &data);
STATIC Expected<Document, String> ParseFromFile(IN CONST FilePath &path); STATIC Expected<Document, String> ParseFromFile(IN CONST FilePath &path);
STATIC String SerializeToString(IN CONST Node &node); STATIC String SerializeToString(IN CONST Node &node, IN BOOL escape = false);
STATIC String SerializeToString(IN CONST Document &doc); STATIC String SerializeToString(IN CONST Document &doc, IN BOOL escape = false);
STATIC String EscapeXMLString(IN CONST String &xml);
}; };
} // namespace IACore } // namespace IACore