OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimXmlNode.h
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Oscar Kramer <okramer@imagelinks.com> (ossim port by D. Burken)
6 //
7 // Description:
8 //
9 // Contains declaration of class ossimXmlNode.
10 //
11 //*****************************************************************************
12 // $Id: ossimXmlNode.h 12527 2008-03-04 17:02:55Z gpotts $
13 #ifndef ossimXmlNode_HEADER
14 #define ossimXmlNode_HEADER
15 
16 #include <vector>
17 using namespace std;
18 
19 #include <ossim/base/ossimObject.h>
20 #include <ossim/base/ossimRefPtr.h>
23 #include <ossim/base/ossimString.h>
24 
25 
28 {
29 public:
30  typedef std::vector<ossimRefPtr<ossimXmlNode> > ChildListType;
31  typedef std::vector<ossimRefPtr<ossimXmlAttribute> > AttributeListType;
32 
33  ossimXmlNode(istream& xml_stream, ossimXmlNode* parent=0);
34  ossimXmlNode();
35  ossimXmlNode(const ossimXmlNode& src);
36  virtual ossimObject* dup() const
37  {
38  return new ossimXmlNode(*this);
39  }
40  void duplicateAttributes(ossimXmlNode::AttributeListType result)const;
41  void duplicateChildren(ossimXmlNode::ChildListType& result)const;
42  bool read(std::istream& in);
43  // Appends any matching nodes to the list supplied
44  void findChildNodes(const ossimString& rel_xpath,
45  ossimXmlNode::ChildListType& nodelist)const;
46  // Prefer this version when possible
47  const ossimRefPtr<ossimXmlNode> & findFirstNode(const ossimString& rel_xpath)const;
49 
50  ossimRefPtr<ossimXmlAttribute> findAttribute(const ossimString& name);
51  const ossimRefPtr<ossimXmlAttribute> findAttribute(const ossimString& name)const;
52  void setTag(const ossimString& tag);
53  ossimString const& getTag() const { return theTag; }
54  const ossimXmlNode* getParentNode() const;
55  ossimXmlNode* getParentNode();
56  void setParent(ossimXmlNode* parent);
57  const ossimXmlNode::ChildListType& getChildNodes() const;
58  ossimXmlNode::ChildListType& getChildNodes();
59  const ossimXmlNode::AttributeListType& getAttributes() const;
60  bool getAttributeValue(ossimString& value, const ossimString& name)const;
62  {
63  ossimString value;
64  getAttributeValue(value, name);
65  return value;
66  }
67  bool getChildTextValue(ossimString& value,
68  const ossimString& relPath)const;
70  {
71  ossimString value;
72  getChildTextValue(value, relPath);
73  return value;
74  }
75  void addAttribute(ossimRefPtr<ossimXmlAttribute> attribute);
76  void addAttribute(const ossimString& name, const ossimString& value);
77  bool setAttribute(const ossimString& name,
78  const ossimString& value,
79  bool addIfNotPresentFlag=false);
80  ossimRefPtr<ossimXmlNode> addNode(const ossimString& relPath,
81  const ossimString& text = "");
82  ossimRefPtr<ossimXmlNode> addOrSetNode(const ossimString& relPath,
83  const ossimString& text = "");
84  void addChildNode(ossimRefPtr<ossimXmlNode> node);
85  ossimRefPtr<ossimXmlNode> addChildNode(const ossimString& tagName,
86  const ossimString& text="");
87  void addChildren(ossimXmlNode::ChildListType& children);
88  void setChildren(ossimXmlNode::ChildListType& children);
89  void addAttributes(ossimXmlNode::AttributeListType& children);
90  void setAttributes(ossimXmlNode::AttributeListType& children);
91  void setText(const ossimString& text);
92  const ossimString& getText() const { return theText; }
93  bool cdataFlag()const;
94  void setCDataFlag(bool value);
95  OSSIMDLLEXPORT friend ostream& operator << (ostream& os, const ossimXmlNode* xml_node);
96  OSSIMDLLEXPORT friend ostream& operator << (ostream& os, const ossimXmlNode& xml_node);
97 
99  ossimRefPtr<ossimXmlNode> removeChild(const ossimString& tag);
100  void clear();
101  void clearChildren();
102  void clearAttributes();
103 
104  void toKwl(ossimKeywordlist& kwl,
105  const ossimString& prefix="")const;
106  void fromKwl(const ossimKeywordlist& kwlToConvert);
107 
108 protected:
109  ~ossimXmlNode();
110  bool readTag(std::istream& in,
111  ossimString& tag);
112  bool readTextContent(std::istream& in);
113  bool readEndTag(std::istream& in,
114  ossimString& endTag);
115 
116  void skipCommentTag(std::istream& in);
117  bool readCDataContent(std::istream& in);
120  vector<ossimRefPtr<ossimXmlNode> > theChildNodes;
121  vector<ossimRefPtr<ossimXmlAttribute> > theAttributes;
124 /* ossimString theCData; */
125 
126 TYPE_DATA
127 };
128 
129 #endif /* #ifndef ossimXmlNode_HEADER */
ossimXmlNode * theParentNode
Definition: ossimXmlNode.h:119
ossimString theText
Definition: ossimXmlNode.h:122
#define OSSIMDLLEXPORT
Represents serializable keyword/value map.
ossimString theTag
Definition: ossimXmlNode.h:118
ossimString const & getTag() const
Definition: ossimXmlNode.h:53
std::vector< ossimRefPtr< ossimXmlAttribute > > AttributeListType
Definition: ossimXmlNode.h:31
vector< ossimRefPtr< ossimXmlAttribute > > theAttributes
Definition: ossimXmlNode.h:121
std::vector< ossimRefPtr< ossimXmlNode > > ChildListType
Definition: ossimXmlNode.h:30
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
const ossimString & getText() const
Definition: ossimXmlNode.h:92
#define TYPE_DATA
Definition: ossimRtti.h:339
std::basic_istream< char > istream
Base class for char input streams.
Definition: ossimIosFwd.h:20
vector< ossimRefPtr< ossimXmlNode > > theChildNodes
Definition: ossimXmlNode.h:120
bool findFirstNode(const ossimString &path, ossimRefPtr< ossimXmlNode > node, ossimString &s)
Finds from node with path from node and initializes string.
ossimString getAttributeValue(const ossimString &name) const
Definition: ossimXmlNode.h:61
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
ossimString getChildTextValue(const ossimString &relPath) const
Definition: ossimXmlNode.h:69
virtual ossimObject * dup() const
Definition: ossimXmlNode.h:36