#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; XmlElement* getFirstChildWithTagName(const std::string& tag); void setText(const std::string& text); void setTagName(const std::string& tagName); virtual std::string toString(unsigned depth = 0, bool keepInline = false) const; protected: std::string mTagName; std::string mText; std::vector mAttributes; std::vector > mChildren; }; using XmlElementPtr = std::unique_ptr;