diff options
Diffstat (limited to 'Swiften/Serializer/XML/XMLElement.cpp')
-rw-r--r-- | Swiften/Serializer/XML/XMLElement.cpp | 79 |
1 files changed, 40 insertions, 39 deletions
diff --git a/Swiften/Serializer/XML/XMLElement.cpp b/Swiften/Serializer/XML/XMLElement.cpp index 42b602a..7515061 100644 --- a/Swiften/Serializer/XML/XMLElement.cpp +++ b/Swiften/Serializer/XML/XMLElement.cpp @@ -1,60 +1,61 @@ /* - * Copyright (c) 2010 Remko Tronçon - * Licensed under the GNU General Public License v3. - * See Documentation/Licenses/GPLv3.txt for more information. + * Copyright (c) 2010-2016 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. */ #include <Swiften/Serializer/XML/XMLElement.h> -#include <Swiften/Base/foreach.h> #include <Swiften/Serializer/XML/XMLTextNode.h> namespace Swift { XMLElement::XMLElement(const std::string& tag, const std::string& xmlns, const std::string& text) : tag_(tag) { - if (!xmlns.empty()) { - setAttribute("xmlns", xmlns); - } - if (!text.empty()) { - addNode(XMLTextNode::ref(new XMLTextNode(text))); - } + if (!xmlns.empty()) { + setAttribute("xmlns", xmlns); + } + if (!text.empty()) { + addNode(XMLTextNode::ref(new XMLTextNode(text))); + } } std::string XMLElement::serialize() { - std::string result; - result += "<" + tag_; - typedef std::pair<std::string,std::string> Pair; - foreach(const Pair& p, attributes_) { - result += " " + p.first + "=\"" + p.second + "\""; - } - - if (!childNodes_.empty()) { - result += ">"; - foreach (boost::shared_ptr<XMLNode> node, childNodes_) { - result += node->serialize(); - } - result += "</" + tag_ + ">"; - } - else { - result += "/>"; - } - return result; + std::string result; + result += "<" + tag_; + for (const auto& p : attributes_) { + result += " " + p.first + "=\"" + p.second + "\""; + } + + if (!childNodes_.empty()) { + result += ">"; + for (auto& node : childNodes_) { + result += node->serialize(); + } + result += "</" + tag_ + ">"; + } + else { + result += "/>"; + } + return result; +} + +std::string XMLElement::escapeAttributeValue(std::string value) { + String::replaceAll(value, '&', "&"); + String::replaceAll(value, '<', "<"); + String::replaceAll(value, '>', ">"); + String::replaceAll(value, '\'', "'"); + String::replaceAll(value, '"', """); + return value; } void XMLElement::setAttribute(const std::string& attribute, const std::string& value) { - std::string escapedValue(value); - String::replaceAll(escapedValue, '&', "&"); - String::replaceAll(escapedValue, '<', "<"); - String::replaceAll(escapedValue, '>', ">"); - String::replaceAll(escapedValue, '\'', "'"); - String::replaceAll(escapedValue, '"', """); - attributes_[attribute] = escapedValue; + attributes_[attribute] = escapeAttributeValue(value); } -void XMLElement::addNode(boost::shared_ptr<XMLNode> node) { - if (node) { - childNodes_.push_back(node); - } +void XMLElement::addNode(std::shared_ptr<XMLNode> node) { + if (node) { + childNodes_.push_back(node); + } } } |