1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QDOM_H
5#define QDOM_H
6
7#include <QtXml/qtxmlglobal.h>
8
9#include <QtCore/qcompare.h>
10#include <QtCore/qcontainertools_impl.h>
11#include <QtCore/qstring.h>
12
13#include <iterator>
14
15#if QT_CONFIG(dom)
16
17class tst_QDom;
18
19QT_BEGIN_NAMESPACE
20
21class QIODevice;
22class QTextStream;
23
24class QDomDocumentPrivate;
25class QDomDocumentTypePrivate;
26class QDomDocumentFragmentPrivate;
27class QDomNodePrivate;
28class QDomNodeListPrivate;
29class QDomImplementationPrivate;
30class QDomElementPrivate;
31class QDomNotationPrivate;
32class QDomEntityPrivate;
33class QDomEntityReferencePrivate;
34class QDomProcessingInstructionPrivate;
35class QDomAttrPrivate;
36class QDomCharacterDataPrivate;
37class QDomTextPrivate;
38class QDomCommentPrivate;
39class QDomCDATASectionPrivate;
40class QDomNamedNodeMapPrivate;
41class QDomImplementationPrivate;
42
43class QDomNodeList;
44class QDomElement;
45class QDomText;
46class QDomComment;
47class QDomCDATASection;
48class QDomProcessingInstruction;
49class QDomAttr;
50class QDomEntityReference;
51class QDomDocument;
52class QDomNamedNodeMap;
53class QDomDocument;
54class QDomDocumentFragment;
55class QDomDocumentType;
56class QDomImplementation;
57class QDomNode;
58class QDomEntity;
59class QDomNotation;
60class QDomCharacterData;
61class QXmlStreamReader;
62
63class Q_XML_EXPORT QDomImplementation
64{
65public:
66 QDomImplementation();
67 QDomImplementation(const QDomImplementation &implementation);
68 ~QDomImplementation();
69 QDomImplementation& operator=(const QDomImplementation &other);
70 bool operator==(const QDomImplementation &other) const;
71 bool operator!=(const QDomImplementation &other) const;
72
73 // functions
74 bool hasFeature(const QString& feature, const QString& version) const;
75 QDomDocumentType createDocumentType(const QString& qName, const QString& publicId, const QString& systemId);
76 QDomDocument createDocument(const QString& nsURI, const QString& qName, const QDomDocumentType& doctype);
77
78 enum InvalidDataPolicy { AcceptInvalidChars = 0, DropInvalidChars, ReturnNullNode };
79 static InvalidDataPolicy invalidDataPolicy();
80 static void setInvalidDataPolicy(InvalidDataPolicy policy);
81
82 // Qt extension
83 bool isNull();
84
85private:
86 QDomImplementationPrivate* impl;
87 QDomImplementation(QDomImplementationPrivate*);
88
89 friend class QDomDocument;
90};
91
92class Q_XML_EXPORT QDomNode
93{
94public:
95 enum NodeType {
96 ElementNode = 1,
97 AttributeNode = 2,
98 TextNode = 3,
99 CDATASectionNode = 4,
100 EntityReferenceNode = 5,
101 EntityNode = 6,
102 ProcessingInstructionNode = 7,
103 CommentNode = 8,
104 DocumentNode = 9,
105 DocumentTypeNode = 10,
106 DocumentFragmentNode = 11,
107 NotationNode = 12,
108 BaseNode = 21,// this is not in the standard
109 CharacterDataNode = 22 // this is not in the standard
110 };
111
112 enum EncodingPolicy
113 {
114 EncodingFromDocument = 1,
115 EncodingFromTextStream = 2
116 };
117
118 QDomNode();
119 QDomNode(const QDomNode &node);
120 QDomNode& operator=(const QDomNode &other);
121 bool operator==(const QDomNode &other) const;
122 bool operator!=(const QDomNode &other) const;
123 ~QDomNode();
124
125 // DOM functions
126 QDomNode insertBefore(const QDomNode& newChild, const QDomNode& refChild);
127 QDomNode insertAfter(const QDomNode& newChild, const QDomNode& refChild);
128 QDomNode replaceChild(const QDomNode& newChild, const QDomNode& oldChild);
129 QDomNode removeChild(const QDomNode& oldChild);
130 QDomNode appendChild(const QDomNode& newChild);
131 bool hasChildNodes() const;
132 QDomNode cloneNode(bool deep = true) const;
133 void normalize();
134 bool isSupported(const QString& feature, const QString& version) const;
135
136 // DOM read-only attributes
137 QString nodeName() const;
138 NodeType nodeType() const;
139 QDomNode parentNode() const;
140 QDomNodeList childNodes() const;
141 QDomNode firstChild() const;
142 QDomNode lastChild() const;
143 QDomNode previousSibling() const;
144 QDomNode nextSibling() const;
145 QDomNamedNodeMap attributes() const;
146 QDomDocument ownerDocument() const;
147 QString namespaceURI() const;
148 QString localName() const;
149 bool hasAttributes() const;
150
151 // DOM attributes
152 QString nodeValue() const;
153 void setNodeValue(const QString &value);
154 QString prefix() const;
155 void setPrefix(const QString& pre);
156
157 // Qt extensions
158 bool isAttr() const;
159 bool isCDATASection() const;
160 bool isDocumentFragment() const;
161 bool isDocument() const;
162 bool isDocumentType() const;
163 bool isElement() const;
164 bool isEntityReference() const;
165 bool isText() const;
166 bool isEntity() const;
167 bool isNotation() const;
168 bool isProcessingInstruction() const;
169 bool isCharacterData() const;
170 bool isComment() const;
171
172 /**
173 * Shortcut to avoid dealing with QDomNodeList
174 * all the time.
175 */
176 QDomNode namedItem(const QString& name) const;
177
178 bool isNull() const;
179 void clear();
180
181 QDomAttr toAttr() const;
182 QDomCDATASection toCDATASection() const;
183 QDomDocumentFragment toDocumentFragment() const;
184 QDomDocument toDocument() const;
185 QDomDocumentType toDocumentType() const;
186 QDomElement toElement() const;
187 QDomEntityReference toEntityReference() const;
188 QDomText toText() const;
189 QDomEntity toEntity() const;
190 QDomNotation toNotation() const;
191 QDomProcessingInstruction toProcessingInstruction() const;
192 QDomCharacterData toCharacterData() const;
193 QDomComment toComment() const;
194
195 void save(QTextStream&, int, EncodingPolicy=QDomNode::EncodingFromDocument) const;
196
197 QDomElement firstChildElement(const QString &tagName = QString(), const QString &namespaceURI = QString()) const;
198 QDomElement lastChildElement(const QString &tagName = QString(), const QString &namespaceURI = QString()) const;
199 QDomElement previousSiblingElement(const QString &tagName = QString(), const QString &namespaceURI = QString()) const;
200 QDomElement nextSiblingElement(const QString &taName = QString(), const QString &namespaceURI = QString()) const;
201
202 int lineNumber() const;
203 int columnNumber() const;
204
205protected:
206 QDomNodePrivate* impl;
207 QDomNode(QDomNodePrivate*);
208
209private:
210 friend class ::tst_QDom;
211 friend class QDomDocument;
212 friend class QDomDocumentType;
213 friend class QDomNodeList;
214 friend class QDomNamedNodeMap;
215};
216
217class Q_XML_EXPORT QDomNodeList
218{
219public:
220 QDomNodeList();
221 QDomNodeList(const QDomNodeList &nodeList);
222 QDomNodeList& operator=(const QDomNodeList &other);
223#if QT_XML_REMOVED_SINCE(6, 9)
224 bool operator==(const QDomNodeList &other) const;
225 bool operator!=(const QDomNodeList &other) const;
226#endif
227 ~QDomNodeList();
228
229 // DOM functions
230 QDomNode item(int index) const;
231 inline QDomNode at(int index) const { return item(index); } // Qt API consistency
232
233 // DOM read only attributes
234 int length() const;
235 inline int count() const { return length(); } // Qt API consitancy
236 inline int size() const { return length(); } // Qt API consistency
237 inline bool isEmpty() const { return length() == 0; } // Qt API consistency
238
239private:
240 Q_XML_EXPORT friend bool comparesEqual(const QDomNodeList &lhs, const QDomNodeList &rhs) noexcept;
241 Q_DECLARE_EQUALITY_COMPARABLE(QDomNodeList)
242
243 int noexceptLength() const noexcept;
244
245 class It
246 {
247 const QDomNodeListPrivate *parent;
248 QDomNodePrivate *current;
249
250 friend class QDomNodeList;
251 friend class QDomNodeListPrivate;
252 Q_XML_EXPORT It(const QDomNodeListPrivate *lp, bool start) noexcept;
253
254 friend constexpr bool comparesEqual(const It &lhs, const It &rhs)
255 { Q_ASSERT(lhs.parent == rhs.parent); return lhs.current == rhs.current; }
256 Q_DECLARE_EQUALITY_COMPARABLE_NON_NOEXCEPT(It);
257
258 Q_XML_EXPORT static QDomNodePrivate *findNextInOrder(const QDomNodeListPrivate *parent, QDomNodePrivate *current);
259 Q_XML_EXPORT static QDomNodePrivate *findPrevInOrder(const QDomNodeListPrivate *parent, QDomNodePrivate *current);
260
261 public:
262 // Rule Of Zero applies
263 It() = default;
264
265 using iterator_category = std::bidirectional_iterator_tag;
266 using value_type = QDomNode;
267 using element_type = const QDomNode;
268 using difference_type = qptrdiff; // difference to [container.reqmts]
269 using reference = value_type; // difference to [container.reqmts]
270 using pointer = QtPrivate::ArrowProxy<reference>;
271
272 reference operator*() const { return QDomNode(current); }
273 pointer operator->() const { return { .t: **this }; }
274
275 It &operator++() { current = findNextInOrder(parent, current); return *this; }
276 It operator++(int) { auto copy = *this; ++*this; return copy; }
277
278 It &operator--() { current = findPrevInOrder(parent, current); return *this; }
279 It operator--(int) { auto copy = *this; --*this; return copy; }
280 };
281
282public:
283 using const_iterator = It;
284 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
285
286 using value_type = It::value_type;
287 using difference_type = It::difference_type;
288 using reference = It::reference;
289 using const_reference = reference;
290 using pointer = It::pointer;
291 using const_pointer = pointer;
292
293 [[nodiscard]] const_iterator begin() const noexcept { return It{impl, true}; }
294 [[nodiscard]] const_iterator end() const noexcept { return It{impl, false}; }
295 [[nodiscard]] const_iterator cbegin() const noexcept { return begin(); }
296 [[nodiscard]] const_iterator cend() const noexcept { return end(); }
297
298 [[nodiscard]] const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator{end()}; }
299 [[nodiscard]] const_reverse_iterator rend() const noexcept { return const_reverse_iterator{begin()}; }
300 [[nodiscard]] const_reverse_iterator crbegin() const noexcept { return rbegin(); }
301 [[nodiscard]] const_reverse_iterator crend() const noexcept { return rend(); }
302
303 [[nodiscard]] const_iterator constBegin() const noexcept { return begin(); }
304 [[nodiscard]] const_iterator constEnd() const noexcept { return end(); }
305
306private:
307 QDomNodeListPrivate* impl;
308 QDomNodeList(QDomNodeListPrivate*);
309
310 friend class QDomNode;
311 friend class QDomElement;
312 friend class QDomDocument;
313 friend class ::tst_QDom;
314};
315
316class Q_XML_EXPORT QDomDocumentType : public QDomNode
317{
318public:
319 QDomDocumentType();
320 QDomDocumentType(const QDomDocumentType &documentType);
321 QDomDocumentType& operator=(const QDomDocumentType &other);
322
323 // DOM read only attributes
324 QString name() const;
325 QDomNamedNodeMap entities() const;
326 QDomNamedNodeMap notations() const;
327 QString publicId() const;
328 QString systemId() const;
329 QString internalSubset() const;
330
331 // Overridden from QDomNode
332 inline QDomNode::NodeType nodeType() const { return DocumentTypeNode; }
333
334private:
335 QDomDocumentType(QDomDocumentTypePrivate*);
336
337 friend class QDomImplementation;
338 friend class QDomDocument;
339 friend class QDomNode;
340 friend class ::tst_QDom;
341};
342
343class Q_XML_EXPORT QDomDocument : public QDomNode
344{
345public:
346 enum class ParseOption {
347 Default = 0x00,
348 UseNamespaceProcessing = 0x01,
349 PreserveSpacingOnlyNodes = 0x02,
350 };
351 Q_DECLARE_FLAGS(ParseOptions, ParseOption)
352
353 struct ParseResult
354 {
355 QString errorMessage;
356 qsizetype errorLine = 0;
357 qsizetype errorColumn = 0;
358
359 explicit operator bool() const noexcept { return errorMessage.isEmpty(); }
360 };
361
362 QDomDocument();
363 explicit QDomDocument(const QString& name);
364 explicit QDomDocument(const QDomDocumentType& doctype);
365 QDomDocument(const QDomDocument &document);
366 QDomDocument& operator=(const QDomDocument &other);
367 ~QDomDocument();
368
369 // DOM functions
370 QDomElement createElement(const QString& tagName);
371 QDomDocumentFragment createDocumentFragment();
372 QDomText createTextNode(const QString& data);
373 QDomComment createComment(const QString& data);
374 QDomCDATASection createCDATASection(const QString& data);
375 QDomProcessingInstruction createProcessingInstruction(const QString& target, const QString& data);
376 QDomAttr createAttribute(const QString& name);
377 QDomEntityReference createEntityReference(const QString& name);
378 QDomNodeList elementsByTagName(const QString& tagname) const;
379 QDomNode importNode(const QDomNode& importedNode, bool deep);
380 QDomElement createElementNS(const QString& nsURI, const QString& qName);
381 QDomAttr createAttributeNS(const QString& nsURI, const QString& qName);
382 QDomNodeList elementsByTagNameNS(const QString& nsURI, const QString& localName);
383 QDomElement elementById(const QString& elementId);
384
385 // DOM read only attributes
386 QDomDocumentType doctype() const;
387 QDomImplementation implementation() const;
388 QDomElement documentElement() const;
389
390 // Overridden from QDomNode
391 inline QDomNode::NodeType nodeType() const { return DocumentNode; }
392
393 // Qt extensions
394#if QT_DEPRECATED_SINCE(6, 8)
395 QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.")
396 bool setContent(const QByteArray &text, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr);
397 QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.")
398 bool setContent(const QString &text, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr);
399 QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.")
400 bool setContent(QIODevice *dev, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr);
401 QT_DEPRECATED_VERSION_X_6_8("Use the overload returning ParseResult instead.")
402 bool setContent(const QByteArray &text, QString *errorMsg, int *errorLine = nullptr, int *errorColumn = nullptr);
403 QT_DEPRECATED_VERSION_X_6_8("Use the overload returning ParseResult instead.")
404 bool setContent(const QString &text, QString *errorMsg, int *errorLine = nullptr, int *errorColumn = nullptr);
405 QT_DEPRECATED_VERSION_X_6_8("Use the overload returning ParseResult instead.")
406 bool setContent(QIODevice *dev, QString *errorMsg, int *errorLine = nullptr, int *errorColumn = nullptr);
407 QT_DEPRECATED_VERSION_X_6_8("Use the overload taking ParseOptions instead.")
408 bool setContent(QXmlStreamReader *reader, bool namespaceProcessing, QString *errorMsg = nullptr,
409 int *errorLine = nullptr, int *errorColumn = nullptr);
410#endif // QT_DEPRECATED_SINCE(6, 8)
411
412 Q_WEAK_OVERLOAD
413 ParseResult setContent(const QByteArray &data, ParseOptions options = ParseOption::Default)
414 { return setContentImpl(data, options); }
415 ParseResult setContent(QAnyStringView data, ParseOptions options = ParseOption::Default);
416 ParseResult setContent(QIODevice *device, ParseOptions options = ParseOption::Default);
417 ParseResult setContent(QXmlStreamReader *reader, ParseOptions options = ParseOption::Default);
418
419 // Qt extensions
420 QString toString(int indent = 1) const;
421 QByteArray toByteArray(int indent = 1) const;
422
423private:
424 ParseResult setContentImpl(const QByteArray &data, ParseOptions options);
425
426 QDomDocument(QDomDocumentPrivate*);
427
428 friend class QDomNode;
429};
430
431class Q_XML_EXPORT QDomNamedNodeMap
432{
433public:
434 QDomNamedNodeMap();
435 QDomNamedNodeMap(const QDomNamedNodeMap &namedNodeMap);
436 QDomNamedNodeMap& operator=(const QDomNamedNodeMap &other);
437 bool operator==(const QDomNamedNodeMap &other) const;
438 bool operator!=(const QDomNamedNodeMap &other) const;
439 ~QDomNamedNodeMap();
440
441 // DOM functions
442 QDomNode namedItem(const QString& name) const;
443 QDomNode setNamedItem(const QDomNode& newNode);
444 QDomNode removeNamedItem(const QString& name);
445 QDomNode item(int index) const;
446 QDomNode namedItemNS(const QString& nsURI, const QString& localName) const;
447 QDomNode setNamedItemNS(const QDomNode& newNode);
448 QDomNode removeNamedItemNS(const QString& nsURI, const QString& localName);
449
450 // DOM read only attributes
451 int length() const;
452 int count() const { return length(); } // Qt API consitancy
453 inline int size() const { return length(); } // Qt API consistency
454 inline bool isEmpty() const { return length() == 0; } // Qt API consistency
455
456 // Qt extension
457 bool contains(const QString& name) const;
458
459private:
460 QDomNamedNodeMapPrivate* impl;
461 QDomNamedNodeMap(QDomNamedNodeMapPrivate*);
462
463 friend class QDomNode;
464 friend class QDomDocumentType;
465 friend class QDomElement;
466};
467
468class Q_XML_EXPORT QDomDocumentFragment : public QDomNode
469{
470public:
471 QDomDocumentFragment();
472 QDomDocumentFragment(const QDomDocumentFragment &documentFragment);
473 QDomDocumentFragment& operator=(const QDomDocumentFragment &other);
474
475 // Overridden from QDomNode
476 inline QDomNode::NodeType nodeType() const { return DocumentFragmentNode; }
477
478private:
479 QDomDocumentFragment(QDomDocumentFragmentPrivate*);
480
481 friend class QDomDocument;
482 friend class QDomNode;
483};
484
485class Q_XML_EXPORT QDomCharacterData : public QDomNode
486{
487public:
488 QDomCharacterData();
489 QDomCharacterData(const QDomCharacterData &characterData);
490 QDomCharacterData& operator=(const QDomCharacterData &other);
491
492 // DOM functions
493 QString substringData(unsigned long offset, unsigned long count);
494 void appendData(const QString& arg);
495 void insertData(unsigned long offset, const QString& arg);
496 void deleteData(unsigned long offset, unsigned long count);
497 void replaceData(unsigned long offset, unsigned long count, const QString& arg);
498
499 // DOM read only attributes
500 int length() const;
501
502 // DOM attributes
503 QString data() const;
504 void setData(const QString &data);
505
506 // Overridden from QDomNode
507 QDomNode::NodeType nodeType() const;
508
509private:
510 QDomCharacterData(QDomCharacterDataPrivate*);
511
512 friend class QDomDocument;
513 friend class QDomText;
514 friend class QDomComment;
515 friend class QDomNode;
516};
517
518class Q_XML_EXPORT QDomAttr : public QDomNode
519{
520public:
521 QDomAttr();
522 QDomAttr(const QDomAttr &attr);
523 QDomAttr& operator=(const QDomAttr &other);
524
525 // DOM read only attributes
526 QString name() const;
527 bool specified() const;
528 QDomElement ownerElement() const;
529
530 // DOM attributes
531 QString value() const;
532 void setValue(const QString &value);
533
534 // Overridden from QDomNode
535 inline QDomNode::NodeType nodeType() const { return AttributeNode; }
536
537private:
538 QDomAttr(QDomAttrPrivate*);
539
540 friend class QDomDocument;
541 friend class QDomElement;
542 friend class QDomNode;
543};
544
545class Q_XML_EXPORT QDomElement : public QDomNode
546{
547public:
548 QDomElement();
549 QDomElement(const QDomElement &element);
550 QDomElement& operator=(const QDomElement &other);
551
552 // DOM functions
553 QString attribute(const QString& name, const QString& defValue = QString() ) const;
554 void setAttribute(const QString& name, const QString& value);
555 void setAttribute(const QString& name, qlonglong value);
556 void setAttribute(const QString& name, qulonglong value);
557 inline void setAttribute(const QString& name, int value)
558 { setAttribute(name, value: qlonglong(value)); }
559 inline void setAttribute(const QString& name, uint value)
560 { setAttribute(name, value: qulonglong(value)); }
561 void setAttribute(const QString& name, float value);
562 void setAttribute(const QString& name, double value);
563 void removeAttribute(const QString& name);
564 QDomAttr attributeNode(const QString& name);
565 QDomAttr setAttributeNode(const QDomAttr& newAttr);
566 QDomAttr removeAttributeNode(const QDomAttr& oldAttr);
567 QDomNodeList elementsByTagName(const QString& tagname) const;
568 bool hasAttribute(const QString& name) const;
569
570 QString attributeNS(const QString& nsURI, const QString& localName, const QString& defValue = QString()) const;
571 void setAttributeNS(const QString& nsURI, const QString& qName, const QString& value);
572 inline void setAttributeNS(const QString& nsURI, const QString& qName, int value)
573 { setAttributeNS(nsURI, qName, value: qlonglong(value)); }
574 inline void setAttributeNS(const QString& nsURI, const QString& qName, uint value)
575 { setAttributeNS(nsURI, qName, value: qulonglong(value)); }
576 void setAttributeNS(const QString& nsURI, const QString& qName, qlonglong value);
577 void setAttributeNS(const QString& nsURI, const QString& qName, qulonglong value);
578 void setAttributeNS(const QString& nsURI, const QString& qName, double value);
579 void removeAttributeNS(const QString& nsURI, const QString& localName);
580 QDomAttr attributeNodeNS(const QString& nsURI, const QString& localName);
581 QDomAttr setAttributeNodeNS(const QDomAttr& newAttr);
582 QDomNodeList elementsByTagNameNS(const QString& nsURI, const QString& localName) const;
583 bool hasAttributeNS(const QString& nsURI, const QString& localName) const;
584
585 // DOM read only attributes
586 QString tagName() const;
587 void setTagName(const QString& name); // Qt extension
588
589 // Overridden from QDomNode
590 QDomNamedNodeMap attributes() const;
591 inline QDomNode::NodeType nodeType() const { return ElementNode; }
592
593 QString text() const;
594
595private:
596 QDomElement(QDomElementPrivate*);
597
598 friend class QDomDocument;
599 friend class QDomNode;
600 friend class QDomAttr;
601};
602
603class Q_XML_EXPORT QDomText : public QDomCharacterData
604{
605public:
606 QDomText();
607 QDomText(const QDomText &text);
608 QDomText& operator=(const QDomText &other);
609
610 // DOM functions
611 QDomText splitText(int offset);
612
613 // Overridden from QDomCharacterData
614 inline QDomNode::NodeType nodeType() const { return TextNode; }
615
616private:
617 QDomText(QDomTextPrivate*);
618
619 friend class QDomCDATASection;
620 friend class QDomDocument;
621 friend class QDomNode;
622};
623
624class Q_XML_EXPORT QDomComment : public QDomCharacterData
625{
626public:
627 QDomComment();
628 QDomComment(const QDomComment &comment);
629 QDomComment& operator=(const QDomComment &other);
630
631 // Overridden from QDomCharacterData
632 inline QDomNode::NodeType nodeType() const { return CommentNode; }
633
634private:
635 QDomComment(QDomCommentPrivate*);
636
637 friend class QDomDocument;
638 friend class QDomNode;
639};
640
641class Q_XML_EXPORT QDomCDATASection : public QDomText
642{
643public:
644 QDomCDATASection();
645 QDomCDATASection(const QDomCDATASection &cdataSection);
646 QDomCDATASection& operator=(const QDomCDATASection &other);
647
648 // Overridden from QDomText
649 inline QDomNode::NodeType nodeType() const { return CDATASectionNode; }
650
651private:
652 QDomCDATASection(QDomCDATASectionPrivate*);
653
654 friend class QDomDocument;
655 friend class QDomNode;
656};
657
658class Q_XML_EXPORT QDomNotation : public QDomNode
659{
660public:
661 QDomNotation();
662 QDomNotation(const QDomNotation &notation);
663 QDomNotation& operator=(const QDomNotation &other);
664
665 // DOM read only attributes
666 QString publicId() const;
667 QString systemId() const;
668
669 // Overridden from QDomNode
670 inline QDomNode::NodeType nodeType() const { return NotationNode; }
671
672private:
673 QDomNotation(QDomNotationPrivate*);
674
675 friend class QDomDocument;
676 friend class QDomNode;
677};
678
679class Q_XML_EXPORT QDomEntity : public QDomNode
680{
681public:
682 QDomEntity();
683 QDomEntity(const QDomEntity &entity);
684 QDomEntity& operator=(const QDomEntity &other);
685
686 // DOM read only attributes
687 QString publicId() const;
688 QString systemId() const;
689 QString notationName() const;
690
691 // Overridden from QDomNode
692 inline QDomNode::NodeType nodeType() const { return EntityNode; }
693
694private:
695 QDomEntity(QDomEntityPrivate*);
696
697 friend class QDomNode;
698};
699
700class Q_XML_EXPORT QDomEntityReference : public QDomNode
701{
702public:
703 QDomEntityReference();
704 QDomEntityReference(const QDomEntityReference &entityReference);
705 QDomEntityReference& operator=(const QDomEntityReference &other);
706
707 // Overridden from QDomNode
708 inline QDomNode::NodeType nodeType() const { return EntityReferenceNode; }
709
710private:
711 QDomEntityReference(QDomEntityReferencePrivate*);
712
713 friend class QDomDocument;
714 friend class QDomNode;
715};
716
717class Q_XML_EXPORT QDomProcessingInstruction : public QDomNode
718{
719public:
720 QDomProcessingInstruction();
721 QDomProcessingInstruction(const QDomProcessingInstruction &processingInstruction);
722 QDomProcessingInstruction& operator=(const QDomProcessingInstruction &other);
723
724 // DOM read only attributes
725 QString target() const;
726
727 // DOM attributes
728 QString data() const;
729 void setData(const QString &data);
730
731 // Overridden from QDomNode
732 inline QDomNode::NodeType nodeType() const { return ProcessingInstructionNode; }
733
734private:
735 QDomProcessingInstruction(QDomProcessingInstructionPrivate*);
736
737 friend class QDomDocument;
738 friend class QDomNode;
739};
740
741
742Q_XML_EXPORT QTextStream& operator<<(QTextStream& stream, const QDomNode& node);
743
744QT_END_NAMESPACE
745
746#endif // feature dom
747
748#endif // QDOM_H
749

source code of qtbase/src/xml/dom/qdom.h