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_RefCountPtr.hpp"
00039
00040 namespace Teuchos
00041 {
00042
00043 class XMLObject;
00044
00049 class XMLObjectImplem
00050 {
00051 typedef Teuchos::map<string, string> Map;
00052
00053 public:
00055 XMLObjectImplem(const string& string);
00056
00058 XMLObjectImplem* deepCopy() const ;
00059
00061 void addAttribute(const string& name, const string& value);
00062
00064 void addChild(const XMLObject& child);
00065
00067 void addContent(const string& contentLine);
00068
00070 const string& getTag() const {return tag_;}
00071
00073 bool hasAttribute(const string& name) const
00074 {return attributes_.find(name) != attributes_.end();}
00075
00077 const string& getAttribute(const 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 string& getContentLine(int i) const {return content_[i];}
00091
00093 void print(ostream& os, int indent) const ;
00094
00096 string toString() const ;
00097
00099 string header(bool strictXML = false) const ;
00100
00102 string terminatedHeader(bool strictXML = false) const ;
00103
00105 string footer() const {return "</" + getTag() + ">";}
00106
00107 private:
00108
00110 void printContent(ostream& os, int indent) const ;
00111
00113 static string XMLifyAttVal(const string &attval);
00114
00115 string tag_;
00116 Map attributes_;
00117 Array<XMLObject> children_;
00118 Array<string> content_;
00119
00120 };
00121
00122 }
00123
00124 #endif
00125