fix xml escapes in attribute values

This commit is contained in:
MihailRis 2026-08-22 16:17:59 +03:00
parent 2c6cffcf19
commit fc8065e550

View file

@ -208,6 +208,14 @@ namespace {
class Parser : BasicParser<char> {
std::unique_ptr<Document> document;
void processEscapes(std::string& text) {
util::replaceAll(text, "&quot;", "\"");
util::replaceAll(text, "&apos;", "'");
util::replaceAll(text, "&lt;", "<");
util::replaceAll(text, "&gt;", ">");
util::replaceAll(text, "&amp;", "&");
}
std::unique_ptr<Node> parseOpenTag() {
std::string tag = parseXMLName();
auto node = std::make_unique<Node>(tag);
@ -230,6 +238,7 @@ class Parser : BasicParser<char> {
}
skip(1);
attrtext = parseString(quote);
processEscapes(attrtext);
}
node->set(attrname, attrtext);
}
@ -241,11 +250,7 @@ class Parser : BasicParser<char> {
if (peek() != '<') {
auto element = std::make_unique<Node>("#");
auto text = parseText();
util::replaceAll(text, "&quot;", "\"");
util::replaceAll(text, "&apos;", "'");
util::replaceAll(text, "&lt;", "<");
util::replaceAll(text, "&gt;", ">");
util::replaceAll(text, "&amp;", "&");
processEscapes(text);
element->set("#", text);
return element;
}