dom_node.h
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2016 The ClanLib 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 ClanLib may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 */
28 
29 
30 #pragma once
31 
32 #include <memory>
33 #include "dom_string.h"
34 
35 namespace clan
36 {
39 
40  class DomElement;
41  class DomAttr;
42  class DomText;
43  class DomCDATASection;
44  class DomEntityReference;
45  class DomEntity;
46  class DomProcessingInstruction;
47  class DomComment;
48  class DomDocument;
49  class DomDocumentType;
50  class DomDocumentFragment;
51  class DomNotation;
52  class DomNodeList;
53  class DomNamedNodeMap;
54  class DomNode_Impl;
55 
70  class DomNode
71  {
72  public:
73  DomNode();
74 
78  DomNode(const DomNode &copy);
79 
80  ~DomNode();
81 
83  enum NodeType
84  {
85  NULL_NODE = 0,
88  TEXT_NODE = 3,
98  };
99 
101 
116  DomString get_node_name() const;
117 
120 
122 
125  DomString get_prefix() const;
126 
128 
135  void set_prefix(const DomString &prefix);
136 
138 
141  DomString get_local_name() const;
142 
144 
159  DomString get_node_value() const;
160 
162  void set_node_value(const DomString &value);
163 
165  unsigned short get_node_type() const;
166 
168 
171  DomNode get_parent_node() const;
172 
174 
181 
183 
184  DomNode get_first_child() const;
185 
187 
188  DomNode get_last_child() const;
189 
191 
193 
195 
196  DomNode get_next_sibling() const;
197 
200 
202 
204 
206  bool is_null() const;
207 
209  bool is_element() const;
210 
212  bool is_attr() const;
213 
215  bool is_text() const;
216 
218  bool is_cdata_section() const;
219 
221  bool is_entity_reference() const;
222 
224  bool is_entity() const;
225 
227  bool is_processing_instruction() const;
228 
230  bool is_comment() const;
231 
233  bool is_document() const;
234 
236  bool is_document_type() const;
237 
239  bool is_document_fragment() const;
240 
242  bool is_notation() const;
243 
245  bool is_supported(const DomString &feature, const DomString &version) const;
246 
248  bool has_attributes() const;
249 
251  bool has_child_nodes() const;
252 
254 
257  DomNode &operator =(const DomNode &copy);
258 
260  bool operator ==(const DomNode &other) const;
261 
263  bool operator !=(const DomNode &other) const;
264 
266 
276  void normalize();
277 
279 
285  DomNode insert_before(DomNode &new_child, DomNode &ref_child);
286 
288 
292  DomNode replace_child(DomNode &new_child, DomNode &old_child);
293 
295  DomNode remove_child(DomNode &old_child);
296 
298 
299  DomNode append_child(DomNode new_child);
300 
302 
309  DomNode clone_node(bool deep) const;
310 
312 
313  DomElement to_element() const;
314 
316 
317  DomAttr to_attr() const;
318 
320 
321  DomText to_text() const;
322 
324 
326 
328 
330 
332 
333  DomEntity to_entity() const;
334 
336 
338 
340 
341  DomComment to_comment() const;
342 
344 
345  DomDocument to_document() const;
346 
348 
350 
352 
354 
356 
357  DomNotation to_notation() const;
358 
360 
361  DomNode named_item(const DomString &name) const;
362 
365  const DomString &namespace_uri,
366  const DomString &local_name) const;
367 
369  DomString find_namespace_uri(const DomString &qualified_name) const;
370 
372  DomString find_prefix(const DomString &namespace_uri) const;
373 
375  std::vector<DomNode> select_nodes(const DomString &xpath_expression) const;
376 
378  DomNode select_node(const DomString &xpath_expression) const;
379 
381  std::string select_string(const DomString &xpath_expression) const;
382 
384  int select_int(const DomString &xpath_expression) const;
385 
387  float select_float(const DomString &xpath_expression) const;
388 
390  bool select_bool(const DomString &xpath_expression) const;
391 
392  protected:
393  DomNode(DomDocument doc, unsigned short node_type);
394  DomNode(const std::shared_ptr<DomNode_Impl> &impl);
395 
396  std::shared_ptr<DomNode_Impl> impl;
397 
398  friend class DomDocument;
399  friend class DomNamedNodeMap;
400  };
401 
403 }
DomDocument to_document() const
Returns the Document interface to this node.
Definition: dom_node.h:96
bool operator==(const DomNode &other) const
Compare operator.
bool is_comment() const
Returns true if this is a comment node.
DOM Attribute class.
Definition: dom_attr.h:66
Definition: clanapp.h:35
DOM Comment class.
Definition: dom_comment.h:44
DomNode get_previous_sibling() const
The node immediately preceding this node.
DomProcessingInstruction to_processing_instruction() const
Returns the Processing Instruction interface to this node.
std::string select_string(const DomString &xpath_expression) const
Returns the first node value matching the specified xpath expression using this node as the context n...
DOM Node List class.
Definition: dom_node_list.h:50
DomNode named_item_ns(const DomString &namespace_uri, const DomString &local_name) const
Retrieves the first child node with the specified namespace URI and local name.
DOM Document Type class.
Definition: dom_document_type.h:50
std::string DomString
Definition: dom_string.h:37
DomString get_node_name() const
Returns the node name.
DomNotation to_notation() const
Returns the Notation interface to this node.
Definition: dom_node.h:85
bool has_child_nodes() const
Returns true if this node has any children.
DomString get_local_name() const
Returns local part of the qualified name of this node.
bool is_null() const
Returns true if this is a null node.
bool is_attr() const
Returns true if this is an attribute node.
Definition: dom_node.h:89
DomNode append_child(DomNode new_child)
Adds the node new_child to the end of the list of children of this node.
DomEntityReference to_entity_reference() const
Returns the Entity Reference interface to this node.
DomDocument get_owner_document() const
The Document object associated with this node.
DomString find_namespace_uri(const DomString &qualified_name) const
Searches the node tree upwards for the namespace URI of the given qualified name. ...
DomDocumentFragment to_document_fragment() const
Returns the Document Fragment interface to this node.
DomNamedNodeMap get_attributes() const
A NamedNodeMap containing the attributes of this node (if it is an Element) or null otherwise...
bool is_document_type() const
Returns true if this is a document type node.
DOM CDATA Section.
Definition: dom_cdata_section.h:54
Definition: dom_node.h:93
DOM Entity class.
Definition: dom_entity.h:45
DomNode & operator=(const DomNode &copy)
Copy assignment operator.
bool is_entity_reference() const
Returns true if this is an entity reference node.
bool is_document_fragment() const
Returns true if this is a document fragment node.
void normalize()
Merges any adjacent Text nodes.
std::vector< DomNode > select_nodes(const DomString &xpath_expression) const
Returns all the nodes matching the specified xpath expression using this node as the context node...
Definition: dom_node.h:95
bool is_document() const
Returns true if this is a document node.
Definition: dom_node.h:90
bool is_notation() const
Returns true if this is a notation node.
DOM Document class.
Definition: dom_document.h:64
DOM Entity Reference class.
Definition: dom_entity_reference.h:51
bool is_element() const
Returns true if this is an element node.
std::shared_ptr< DomNode_Impl > impl
Definition: dom_node.h:396
DomNode get_next_sibling() const
The node immediately following this node.
void set_node_value(const DomString &value)
Sets the node value.
DomString find_prefix(const DomString &namespace_uri) const
Searches the node tree upwards for the prefix name for the namespace URI.
DOM Node class.
Definition: dom_node.h:70
DomNodeList get_child_nodes() const
Returns a NodeList that contains all children of this node.
DomCDATASection to_cdata_section() const
Returns the CDATA Section interface to this node.
DOM Element class.
Definition: dom_element.h:59
DomNode named_item(const DomString &name) const
Returns the first child node with the specified node name.
DomNode remove_child(DomNode &old_child)
Removes the child node indicated by old_child from the list of children, and returns it...
void set_prefix(const DomString &prefix)
Sets the namespace prefix of the node.
DomAttr to_attr() const
Returns the Attribute interface to this node.
DomNode get_parent_node() const
Returns the parent of this node.
Definition: dom_node.h:97
bool operator!=(const DomNode &other) const
Compare operator.
Definition: dom_node.h:88
Definition: dom_node.h:91
float select_float(const DomString &xpath_expression) const
Returns the first node value (as float) matching the specified xpath expression using this node as th...
NodeType
An integer indicating which type of node this is.
Definition: dom_node.h:83
int select_int(const DomString &xpath_expression) const
Returns the first node value (as integer) matching the specified xpath expression using this node as ...
bool has_attributes() const
Returns true if this node (if its an element) has any attributes.
DomString get_node_value() const
Returns the node value.
DOM Text class.
Definition: dom_text.h:54
DomEntity to_entity() const
Returns the Entity interface to this node.
Definition: dom_node.h:87
DomNode get_first_child() const
The first child of this node.
unsigned short get_node_type() const
Returns the node type (one of those in the NodeType enum).
DomNode insert_before(DomNode &new_child, DomNode &ref_child)
Inserts the node new_child before the existing child node ref_child.
DomElement to_element() const
Returns the Element interface to this node.
Definition: dom_node.h:94
DomString get_prefix() const
Returns the namespace prefix of the node.
bool is_supported(const DomString &feature, const DomString &version) const
Tests whether the DOM implementation implements a specific feature and that feature is supported by t...
DOM Notation class.
Definition: dom_notation.h:48
bool is_entity() const
Returns true if this is an entity node.
DomText to_text() const
Returns the Text interface to this node.
Definition: dom_node.h:86
DomNode replace_child(DomNode &new_child, DomNode &old_child)
Replaces the child node old_child with new_child in the list of children.
bool is_text() const
Returns true if this is a text node.
DomString get_namespace_uri() const
Returns the namespace URI of this node.
DOM Document Fragment class.
Definition: dom_document_fragment.h:70
DomDocumentType to_document_type() const
Returns the Document Type interface to this node.
DomNode select_node(const DomString &xpath_expression) const
Returns the first node matching the specified xpath expression using this node as the context node...
DOM Named Node Map class.
Definition: dom_named_node_map.h:51
DOM Processing Instruction class.
Definition: dom_processing_instruction.h:43
bool select_bool(const DomString &xpath_expression) const
Returns the first node value (as boolean) matching the specified xpath expression using this node as ...
bool is_cdata_section() const
Returns true if this is a CDATA section node.
DomNode clone_node(bool deep) const
Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes.
DomComment to_comment() const
Returns the Comment interface to this node.
bool is_processing_instruction() const
Returns true if this is a processing instruction node.
DomNode get_last_child() const
The last child of this node.