#pragma once #include #include #include class XmlAttribute; using XmlAttributePtr = std::unique_ptr; class XmlElement { public: XmlElement(const std::string& tagName); virtual ~XmlElement(); static std::unique_ptr Create(const std::string& tagName); void addAttribute(XmlAttributePtr attribute); void addChild(std::unique_ptr child); const std::string& getTagName() const; const std::string& getText() const; XmlAttribute* getAttribute(const std::string& attribute) const; XmlAttribute* getAttribute(std::size_t index) const; std::size_t getNumAttributes() const; std::size_t getNumChildren() const; XmlElement* getChild(std::size_t index) const; void setText(const std::string& text); void setTagName(const std::string& tagName); protected: std::string mTagName; std::string mText; std::vector mAttributes; std::vector > mChildren; }; using XmlElementPtr = std::unique_ptr;