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

Provided by KDAB

Privacy Policy
Learn Advanced QML with KDAB
Find out more

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