dom_node.h
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2015 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 {
74
75 public:
76 DomNode();
77
81 DomNode(const DomNode &copy);
82
83 ~DomNode();
84
88
89 public:
91 enum NodeType
92 {
93 NULL_NODE = 0,
94 ELEMENT_NODE = 1,
95 ATTRIBUTE_NODE = 2,
96 TEXT_NODE = 3,
97 CDATA_SECTION_NODE = 4,
98 ENTITY_REFERENCE_NODE = 5,
99 ENTITY_NODE = 6,
100 PROCESSING_INSTRUCTION_NODE = 7,
101 COMMENT_NODE = 8,
102 DOCUMENT_NODE = 9,
103 DOCUMENT_TYPE_NODE = 10,
104 DOCUMENT_FRAGMENT_NODE = 11,
105 NOTATION_NODE = 12
106 };
107
109
124 DomString get_node_name() const;
125
127 DomString get_namespace_uri() const;
128
130
133 DomString get_prefix() const;
134
136
143 void set_prefix(const DomString &prefix);
144
146
149 DomString get_local_name() const;
150
152
167 DomString get_node_value() const;
168
170 void set_node_value(const DomString &value);
171
173 unsigned short get_node_type() const;
174
176
179 DomNode get_parent_node() const;
180
182
188 DomNodeList get_child_nodes() const;
189
191
192 DomNode get_first_child() const;
193
195
196 DomNode get_last_child() const;
197
199
200 DomNode get_previous_sibling() const;
201
203
204 DomNode get_next_sibling() const;
205
207 DomNamedNodeMap get_attributes() const;
208
210
211 DomDocument get_owner_document() const;
212
214 bool is_null() const;
215
217 bool is_element() const;
218
220 bool is_attr() const;
221
223 bool is_text() const;
224
226 bool is_cdata_section() const;
227
229 bool is_entity_reference() const;
230
232 bool is_entity() const;
233
235 bool is_processing_instruction() const;
236
238 bool is_comment() const;
239
241 bool is_document() const;
242
244 bool is_document_type() const;
245
247 bool is_document_fragment() const;
248
250 bool is_notation() const;
251
253 bool is_supported(const DomString &feature, const DomString &version) const;
254
256 bool has_attributes() const;
257
259 bool has_child_nodes() const;
260
264
265 public:
267
270 DomNode &operator =(const DomNode &copy);
271
273 bool operator ==(const DomNode &other) const;
274
276 bool operator !=(const DomNode &other) const;
277
279
289 void normalize();
290
292
298 DomNode insert_before(DomNode &new_child, DomNode &ref_child);
299
301
305 DomNode replace_child(DomNode &new_child, DomNode &old_child);
306
308 DomNode remove_child(DomNode &old_child);
309
311
312 DomNode append_child(DomNode new_child);
313
315
322 DomNode clone_node(bool deep) const;
323
325
326 DomElement to_element() const;
327
329
330 DomAttr to_attr() const;
331
333
334 DomText to_text() const;
335
337
338 DomCDATASection to_cdata_section() const;
339
341
342 DomEntityReference to_entity_reference() const;
343
345
346 DomEntity to_entity() const;
347
349
350 DomProcessingInstruction to_processing_instruction() const;
351
353
354 DomComment to_comment() const;
355
357
358 DomDocument to_document() const;
359
361
362 DomDocumentType to_document_type() const;
363
365
366 DomDocumentFragment to_document_fragment() const;
367
369
370 DomNotation to_notation() const;
371
373
374 DomNode named_item(const DomString &name) const;
375
377 DomNode named_item_ns(
378 const DomString &namespace_uri,
379 const DomString &local_name) const;
380
382 DomString find_namespace_uri(const DomString &qualified_name) const;
383
385 DomString find_prefix(const DomString &namespace_uri) const;
386
388 std::vector<DomNode> select_nodes(const DomString &xpath_expression) const;
389
391 DomNode select_node(const DomString &xpath_expression) const;
392
394 std::string select_string(const DomString &xpath_expression) const;
395
397 int select_int(const DomString &xpath_expression) const;
398
400 float select_float(const DomString &xpath_expression) const;
401
403 bool select_bool(const DomString &xpath_expression) const;
404
408
409 protected:
410
415 DomNode(DomDocument doc, unsigned short node_type);
416
420 DomNode(const std::shared_ptr<DomNode_Impl> &impl);
421
422 std::shared_ptr<DomNode_Impl> impl;
423
424 friend class DomDocument;
425
426 friend class DomNamedNodeMap;
428 };
429
430 }
431
clan::DomNode::DOCUMENT_NODE
Definition: dom_node.h:102
clan::DomAttr
DOM Attribute class.
Definition: dom_attr.h:66
clan
Definition: clanapp.h:35
clan::DomComment
DOM Comment class.
Definition: dom_comment.h:44
clan::DomNode::is_null
bool is_null() const
Returns true if this is a null node.
clan::DomNodeList
DOM Node List class.
Definition: dom_node_list.h:50
clan::DomDocumentType
DOM Document Type class.
Definition: dom_document_type.h:50
clan::DomNode::DOCUMENT_TYPE_NODE
Definition: dom_node.h:103
clan::DomNode::get_last_child
DomNode get_last_child() const
The last child of this node.
clan::DomNode::get_owner_document
DomDocument get_owner_document() const
The Document object associated with this node.
clan::DomNode::append_child
DomNode append_child(DomNode new_child)
Adds the node new_child to the end of the list of children of this node.
clan::DomNode::COMMENT_NODE
Definition: dom_node.h:101
clan::DomNode::get_child_nodes
DomNodeList get_child_nodes() const
Returns a NodeList that contains all children of this node.
clan::DomNode::select_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...
clan::DomNode::normalize
void normalize()
Merges any adjacent Text nodes.
clan::DomNode::select_int
int select_int(const DomString &xpath_expression) const
Returns the first node value (as integer) matching the specified xpath expression using this node as ...
clan::DomNode::select_float
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...
clan::DomNode::get_first_child
DomNode get_first_child() const
The first child of this node.
clan::DomNode::set_prefix
void set_prefix(const DomString &prefix)
Sets the namespace prefix of the node.
clan::DomNode::is_entity_reference
bool is_entity_reference() const
Returns true if this is an entity reference node.
clan::DomNode::to_document_fragment
DomDocumentFragment to_document_fragment() const
Returns the Document Fragment interface to this node.
clan::DomNode::operator!=
bool operator!=(const DomNode &other) const
Compare operator.
clan::DomNode::to_entity
DomEntity to_entity() const
Returns the Entity interface to this node.
clan::DomNode::get_node_value
DomString get_node_value() const
Returns the node value.
clan::DomNode::is_element
bool is_element() const
Returns true if this is an element node.
clan::DomCDATASection
DOM CDATA Section.
Definition: dom_cdata_section.h:54
clan::DomNode::CDATA_SECTION_NODE
Definition: dom_node.h:97
clan::DomNode::get_previous_sibling
DomNode get_previous_sibling() const
The node immediately preceding this node.
clan::DomNode::to_document
DomDocument to_document() const
Returns the Document interface to this node.
clan::DomEntity
DOM Entity class.
Definition: dom_entity.h:45
clan::DomNode::DomNode
DomNode()
clan::DomNode::NodeType
NodeType
An integer indicating which type of node this is.
Definition: dom_node.h:91
clan::DomNode::find_prefix
DomString find_prefix(const DomString &namespace_uri) const
Searches the node tree upwards for the prefix name for the namespace URI.
clan::DomString
std::string DomString
Definition: dom_string.h:37
clan::DomNode::to_attr
DomAttr to_attr() const
Returns the Attribute interface to this node.
clan::DomNode::impl
std::shared_ptr< DomNode_Impl > impl
Definition: dom_node.h:422
clan::DomNode::NOTATION_NODE
Definition: dom_node.h:105
clan::DomNode::ENTITY_REFERENCE_NODE
Definition: dom_node.h:98
clan::DomDocument
DOM Document class.
Definition: dom_document.h:64
clan::DomNode::is_document_type
bool is_document_type() const
Returns true if this is a document type node.
clan::DomEntityReference
DOM Entity Reference class.
Definition: dom_entity_reference.h:51
clan::DomNode::get_node_name
DomString get_node_name() const
Returns the node name.
clan::DomNode::is_notation
bool is_notation() const
Returns true if this is a notation node.
clan::StyleTokenType::string
@ keyword
clan::DomNode::is_text
bool is_text() const
Returns true if this is a text node.
clan::DomNode
DOM Node class.
Definition: dom_node.h:70
clan::DomNode::DOCUMENT_FRAGMENT_NODE
Definition: dom_node.h:104
clan::DomNode::remove_child
DomNode remove_child(DomNode &old_child)
Removes the child node indicated by old_child from the list of children, and returns it...
clan::DomNode::is_document_fragment
bool is_document_fragment() const
Returns true if this is a document fragment node.
clan::DomNode::has_child_nodes
bool has_child_nodes() const
Returns true if this node has any children.
clan::DomNode::get_prefix
DomString get_prefix() const
Returns the namespace prefix of the node.
clan::DomNode::NULL_NODE
Definition: dom_node.h:93
clan::DomElement
DOM Element class.
Definition: dom_element.h:59
clan::DomNode::to_comment
DomComment to_comment() const
Returns the Comment interface to this node.
clan::DomNode::named_item_ns
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.
clan::DomNode::insert_before
DomNode insert_before(DomNode &new_child, DomNode &ref_child)
Inserts the node new_child before the existing child node ref_child.
clan::DomNode::is_supported
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...
clan::DomNode::to_entity_reference
DomEntityReference to_entity_reference() const
Returns the Entity Reference interface to this node.
clan::DomNode::find_namespace_uri
DomString find_namespace_uri(const DomString &qualified_name) const
Searches the node tree upwards for the namespace URI of the given qualified name. ...
clan::DomNode::named_item
DomNode named_item(const DomString &name) const
Returns the first child node with the specified node name.
clan::DomNode::get_namespace_uri
DomString get_namespace_uri() const
Returns the namespace URI of this node.
clan::DomNode::ATTRIBUTE_NODE
Definition: dom_node.h:95
clan::DomNode::ENTITY_NODE
Definition: dom_node.h:99
clan::DomNode::is_attr
bool is_attr() const
Returns true if this is an attribute node.
clan::DomNode::clone_node
DomNode clone_node(bool deep) const
Returns a duplicate of this node, i.e., serves as a generic copy constructor for nodes.
clan::DomNode::ELEMENT_NODE
Definition: dom_node.h:94
clan::DomText
DOM Text class.
Definition: dom_text.h:54
clan::DomNode::to_cdata_section
DomCDATASection to_cdata_section() const
Returns the CDATA Section interface to this node.
clan::DomNode::is_comment
bool is_comment() const
Returns true if this is a comment node.
clan::DomNode::to_document_type
DomDocumentType to_document_type() const
Returns the Document Type interface to this node.
clan::DomNotation
DOM Notation class.
Definition: dom_notation.h:48
clan::DomNode::has_attributes
bool has_attributes() const
Returns true if this node (if its an element) has any attributes.
clan::DomNode::replace_child
DomNode replace_child(DomNode &new_child, DomNode &old_child)
Replaces the child node old_child with new_child in the list of children.
clan::DomNode::operator=
DomNode & operator=(const DomNode &copy)
Copy assignment operator.
clan::DomNode::is_processing_instruction
bool is_processing_instruction() const
Returns true if this is a processing instruction node.
clan::DomNode::get_local_name
DomString get_local_name() const
Returns local part of the qualified name of this node.
clan::DomNode::operator==
bool operator==(const DomNode &other) const
Compare operator.
clan::DomNode::TEXT_NODE
Definition: dom_node.h:96
clan::DomNode::~DomNode
~DomNode()
clan::DomNode::set_node_value
void set_node_value(const DomString &value)
Sets the node value.
clan::DomNode::select_bool
bool select_bool(const DomString &xpath_expression) const
Returns the first node value (as boolean) matching the specified xpath expression using this node as ...
clan::DomNode::get_node_type
unsigned short get_node_type() const
Returns the node type (one of those in the NodeType enum).
clan::DomNode::get_next_sibling
DomNode get_next_sibling() const
The node immediately following this node.
clan::DomNode::get_parent_node
DomNode get_parent_node() const
Returns the parent of this node.
clan::DomNode::to_notation
DomNotation to_notation() const
Returns the Notation interface to this node.
clan::DomNode::is_cdata_section
bool is_cdata_section() const
Returns true if this is a CDATA section node.
clan::DomDocumentFragment
DOM Document Fragment class.
Definition: dom_document_fragment.h:70
clan::DomNode::is_entity
bool is_entity() const
Returns true if this is an entity node.
clan::DomNode::PROCESSING_INSTRUCTION_NODE
Definition: dom_node.h:100
clan::DomNamedNodeMap
DOM Named Node Map class.
Definition: dom_named_node_map.h:51
clan::DomProcessingInstruction
DOM Processing Instruction class.
Definition: dom_processing_instruction.h:43
clan::DomNode::select_string
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...
clan::DomNode::to_text
DomText to_text() const
Returns the Text interface to this node.
clan::DomNode::select_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...
clan::DomNode::to_element
DomElement to_element() const
Returns the Element interface to this node.
clan::DomNode::is_document
bool is_document() const
Returns true if this is a document node.
clan::DomNode::get_attributes
DomNamedNodeMap get_attributes() const
A NamedNodeMap containing the attributes of this node (if it is an Element) or null otherwise...
clan::DomNode::to_processing_instruction
DomProcessingInstruction to_processing_instruction() const
Returns the Processing Instruction interface to this node.