xml_node.h
1 /*
2 ** UICore SDK
3 ** Copyright (c) 1997-2015 The UICore Team
4 **
5 ** This software is provided 'as-is', without any express or implied
6 ** warranty. In no event will the authors be held liable for any damages
7 ** arising from the use of this software.
8 **
9 ** Permission is granted to anyone to use this software for any purpose,
10 ** including commercial applications, and to alter it and redistribute it
11 ** freely, subject to the following restrictions:
12 **
13 ** 1. The origin of this software must not be misrepresented; you must not
14 ** claim that you wrote the original software. If you use this software
15 ** in a product, an acknowledgment in the product documentation would be
16 ** appreciated but is not required.
17 ** 2. Altered source versions must be plainly marked as such, and must not be
18 ** misrepresented as being the original software.
19 ** 3. This notice may not be removed or altered from any source distribution.
20 **
21 ** Note: Some of the libraries UICore may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 */
28 
29 #pragma once
30 
31 #include <memory>
32 #include <string>
33 
34 namespace uicore
35 {
36  class XmlNode;
37  typedef std::shared_ptr<XmlNode> XmlNodePtr;
38  class XmlDocument;
39  typedef std::shared_ptr<XmlDocument> XmlDocumentPtr;
40 
42 
43  enum class XmlNodeType
44  {
45  element,
46  attribute,
47  text,
48  cdata,
49  comment,
50  document,
52  };
53 
55  class XmlNode : public std::enable_shared_from_this<XmlNode>
56  {
57  public:
58  virtual XmlNodeType type() const = 0;
59  virtual XmlString name() const = 0;
60  virtual XmlString namespace_uri() const = 0;
61  virtual XmlString prefix() const = 0;
62  virtual XmlString local_name() const = 0;
63  virtual XmlString text() const = 0;
64 
65  virtual XmlNodePtr parent() const = 0;
66  virtual XmlNodePtr first_child() const = 0;
67  virtual XmlNodePtr last_child() const = 0;
68  virtual XmlNodePtr previous_sibling() const = 0;
69  virtual XmlNodePtr next_sibling() const = 0;
70  virtual XmlNodePtr first_attribute() const = 0;
71 
72  virtual XmlDocumentPtr owner_document() const = 0;
73 
74  bool is_element() const { return type() == XmlNodeType::element; }
75  bool is_attr() const { return type() == XmlNodeType::attribute; }
76  bool is_text() const { return type() == XmlNodeType::text; }
77  bool is_cdata_section() const { return type() == XmlNodeType::cdata; }
78  bool is_comment() const { return type() == XmlNodeType::comment; }
79  bool is_document() const { return type() == XmlNodeType::document; }
81 
82  bool has_child_nodes() const { return (bool)first_child(); }
83 
84  virtual bool has_attributes() const = 0;
85  virtual bool has_attribute(const XmlString &name) const = 0;
86  virtual bool has_attribute(const XmlString &namespace_uri, const XmlString &local_name) const = 0;
87 
88  virtual XmlString attribute(const XmlString &name, const XmlString &default_value = XmlString()) const = 0;
89  virtual XmlString attribute_ns(const XmlString &namespace_uri, const XmlString &local_name, const XmlString &default_value = XmlString()) const = 0;
90  virtual XmlNodePtr attribute_node(const XmlString &name) const = 0;
91  virtual XmlNodePtr attribute_node(const XmlString &namespace_uri, const XmlString &local_name) const = 0;
92 
93  virtual void set_prefix(const XmlString &prefix) = 0;
94  virtual void set_text(const XmlString &value) = 0;
95 
96  virtual void set_attribute(const XmlString &name, const XmlString &value) = 0;
97  virtual void set_attribute(const XmlString &namespace_uri, const XmlString &qualified_name, const XmlString &value) = 0;
98 
99  virtual void remove_attribute(const XmlString &name) = 0;
100  virtual void remove_attribute(const XmlString &namespace_uri, const XmlString &local_name) = 0;
101  virtual XmlNodePtr remove_attribute(const XmlNodePtr &old_attribute) = 0;
102  virtual XmlNodePtr add_attribute(const XmlNodePtr &new_attribute) = 0;
103 
104  virtual XmlNodePtr insert_before(const XmlNodePtr &new_child, const XmlNodePtr &ref_child) = 0;
105  virtual XmlNodePtr replace_child(const XmlNodePtr &new_child, const XmlNodePtr &old_child) = 0;
106  virtual XmlNodePtr remove_child(const XmlNodePtr &old_child) = 0;
107  virtual XmlNodePtr append_child(const XmlNodePtr &new_child) = 0;
108 
112  virtual XmlNodePtr clone(bool deep) const = 0;
113 
116  virtual XmlNodePtr named_item(const XmlString &name) const = 0;
117  virtual XmlNodePtr named_item(const XmlString &namespace_uri, const XmlString &local_name) const = 0;
118 
120  virtual XmlString find_namespace_uri(const XmlString &qualified_name) const = 0;
121 
123  virtual XmlString find_prefix(const XmlString &namespace_uri) const = 0;
124  };
125 }
bool is_comment() const
Definition: xml_node.h:78
virtual void set_text(const XmlString &value)=0
virtual XmlString local_name() const =0
virtual XmlNodePtr append_child(const XmlNodePtr &new_child)=0
bool is_text() const
Definition: xml_node.h:76
virtual XmlString prefix() const =0
virtual XmlNodePtr remove_child(const XmlNodePtr &old_child)=0
virtual XmlNodeType type() const =0
bool has_child_nodes() const
Definition: xml_node.h:82
virtual bool has_attribute(const XmlString &name) const =0
XML document tree.
Definition: xml_document.h:40
virtual XmlNodePtr named_item(const XmlString &name) const =0
Returns the first child node with the specified node name. Returns null if no child is found...
virtual XmlNodePtr replace_child(const XmlNodePtr &new_child, const XmlNodePtr &old_child)=0
XmlNodeType
Definition: xml_node.h:43
virtual XmlString namespace_uri() const =0
virtual XmlNodePtr add_attribute(const XmlNodePtr &new_attribute)=0
bool is_document() const
Definition: xml_node.h:79
bool is_element() const
Definition: xml_node.h:74
virtual XmlNodePtr first_child() const =0
Tree node in a XML document.
Definition: xml_node.h:55
std::shared_ptr< XmlDocument > XmlDocumentPtr
Definition: xml_document.h:64
virtual void remove_attribute(const XmlString &name)=0
virtual XmlNodePtr clone(bool deep) const =0
Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes. The duplicate node has no parent.
virtual XmlString find_prefix(const XmlString &namespace_uri) const =0
Searches the node tree upwards for the prefix name for the namespace URI.
virtual XmlString attribute(const XmlString &name, const XmlString &default_value=XmlString()) const =0
bool is_document_fragment() const
Definition: xml_node.h:80
virtual XmlNodePtr attribute_node(const XmlString &name) const =0
virtual XmlNodePtr first_attribute() const =0
virtual void set_attribute(const XmlString &name, const XmlString &value)=0
virtual XmlString name() const =0
std::shared_ptr< XmlNode > XmlNodePtr
Definition: xml_node.h:36
virtual void set_prefix(const XmlString &prefix)=0
virtual bool has_attributes() const =0
virtual XmlString text() const =0
virtual XmlNodePtr parent() const =0
virtual XmlString attribute_ns(const XmlString &namespace_uri, const XmlString &local_name, const XmlString &default_value=XmlString()) const =0
virtual XmlDocumentPtr owner_document() const =0
std::string XmlString
Definition: xml_node.h:41
bool is_cdata_section() const
Definition: xml_node.h:77
virtual XmlNodePtr insert_before(const XmlNodePtr &new_child, const XmlNodePtr &ref_child)=0
virtual XmlString find_namespace_uri(const XmlString &qualified_name) const =0
Searches the node tree upwards for the namespace URI of the given qualified name. ...
virtual XmlNodePtr next_sibling() const =0
bool is_attr() const
Definition: xml_node.h:75
Definition: Application/application.h:35
virtual XmlNodePtr last_child() const =0
virtual XmlNodePtr previous_sibling() const =0