00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TEUCHOS_XMLOBJECTIMPLEM_H
00030 #define TEUCHOS_XMLOBJECTIMPLEM_H
00031
00036 #include "Teuchos_map.hpp"
00037 #include "Teuchos_Array.hpp"
00038 #include "Teuchos_RCP.hpp"
00039
00040 namespace Teuchos
00041 {
00042
00043 class XMLObject;
00044
00049 class XMLObjectImplem
00050 {
00051 typedef Teuchos::map<std::string, std::string> Map;
00052
00053 public:
00055 XMLObjectImplem(const std::string& tag);
00056
00058 XMLObjectImplem* deepCopy() const ;
00059
00061 void addAttribute(const std::string& name, const std::string& value);
00062
00064 void addChild(const XMLObject& child);
00065
00067 void addContent(const std::string& contentLine);
00068
00070 const std::string& getTag() const {return tag_;}
00071
00073 bool hasAttribute(const std::string& name) const
00074 {return attributes_.find(name) != attributes_.end();}
00075
00077 const std::string& getAttribute(const std::string& name) const
00078 {return (*(attributes_.find(name))).second;}
00079
00081 int numChildren() const ;
00082
00084 const XMLObject& getChild(int i) const ;
00085
00087 int numContentLines() const {return content_.length();}
00088
00090 const std::string& getContentLine(int i) const {return content_[i];}
00091
00093 void print(std::ostream& os, int indent) const ;
00094
00096 std::string toString() const ;
00097
00099 std::string header(bool strictXML = false) const ;
00100
00102 std::string terminatedHeader(bool strictXML = false) const ;
00103
00105 std::string footer() const {return "</" + getTag() + ">";}
00106
00107 private:
00108
00110 void printContent(std::ostream& os, int indent) const ;
00111
00113 static std::string XMLifyAttVal(const std::string &attval);
00114
00115 std::string tag_;
00116 Map attributes_;
00117 Array<XMLObject> children_;
00118 Array<std::string> content_;
00119
00120 };
00121
00122 }
00123
00124 #endif
00125