diff --git a/src/coders/xml.cpp b/src/coders/xml.cpp index a907b49db..f4f9799ed 100644 --- a/src/coders/xml.cpp +++ b/src/coders/xml.cpp @@ -208,6 +208,14 @@ namespace { class Parser : BasicParser { std::unique_ptr document; + void processEscapes(std::string& text) { + util::replaceAll(text, """, "\""); + util::replaceAll(text, "'", "'"); + util::replaceAll(text, "<", "<"); + util::replaceAll(text, ">", ">"); + util::replaceAll(text, "&", "&"); + } + std::unique_ptr parseOpenTag() { std::string tag = parseXMLName(); auto node = std::make_unique(tag); @@ -230,6 +238,7 @@ class Parser : BasicParser { } skip(1); attrtext = parseString(quote); + processEscapes(attrtext); } node->set(attrname, attrtext); } @@ -241,11 +250,7 @@ class Parser : BasicParser { if (peek() != '<') { auto element = std::make_unique("#"); auto text = parseText(); - util::replaceAll(text, """, "\""); - util::replaceAll(text, "'", "'"); - util::replaceAll(text, "<", "<"); - util::replaceAll(text, ">", ">"); - util::replaceAll(text, "&", "&"); + processEscapes(text); element->set("#", text); return element; }