From 878865b0c53196bc7b21edda423b83b4f14a88d5 Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Tue, 17 Feb 2015 15:11:03 +0100 Subject: added namespace handling to XML --- src/core/XML.cpp | 14 +++++++++++--- src/core/XML.hpp | 25 ++++++++++++++----------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/core/XML.cpp b/src/core/XML.cpp index 0aedbd9..e25d18a 100644 --- a/src/core/XML.cpp +++ b/src/core/XML.cpp @@ -71,7 +71,11 @@ void Element::doSerialize(std::ostream &out, unsigned int tabdepth, bool pretty) out << '\t'; } } - out << '<' << name; + out << '<'; + if(!nspace.empty()){ + out << nspace << ":"; + } + out << name; for (auto &a : attributes) { out << ' ' << a.first << "=\"" << escapePredefinedEntities(a.second) << '\"'; @@ -95,7 +99,11 @@ void Element::doSerialize(std::ostream &out, unsigned int tabdepth, bool pretty) out << '\t'; } } - out << ""; + out << ""; if (pretty) { out << std::endl; } @@ -125,7 +133,7 @@ namespace RttiTypes .composedOf(&XMLNode) .property("name", {&RttiTypes::String, {[](const xml::Element *obj) { - return Variant::fromString(obj->name); + return Variant::fromString(obj->getName()); }}}); const Rtti XMLText = RttiBuilder("XMLText").parent(&XMLNode); } diff --git a/src/core/XML.hpp b/src/core/XML.hpp index a1021d3..02b0d89 100644 --- a/src/core/XML.hpp +++ b/src/core/XML.hpp @@ -113,22 +113,19 @@ public: class Element : public Node { private: ManagedVector children; - -public: - const std::string name; std::map attributes; + const std::string nspace; + const std::string name; - Element(Manager &mgr, Handle parent, std::string name) - : Node(mgr, parent), children(this), name(std::move(name)) - { - } - +public: Element(Manager &mgr, Handle parent, std::string name, - std::map attributes) + std::map attributes = {}, + std::string nspace = "") : Node(mgr, parent), children(this), - name(std::move(name)), - attributes(std::move(attributes)) + attributes(std::move(attributes)), + nspace(std::move(nspace)), + name(std::move(name)) { } @@ -151,10 +148,16 @@ public: children.insert(children.end(), c.begin(), c.end()); } + const std::string &getNamespace() const { return nspace; } + + const std::string &getName() const { return name; } + const std::map &getAttributes() const { return attributes; } + + std::map &getAttributes() { return attributes; } }; class Text : public Node { -- cgit v1.2.3