7#include <QtXml/qtxmlglobal.h>
9#include <QtCore/qcompare.h>
10#include <QtCore/qcontainertools_impl.h>
11#include <QtCore/qstring.h>
24class QDomDocumentPrivate;
25class QDomDocumentTypePrivate;
26class QDomDocumentFragmentPrivate;
28class QDomNodeListPrivate;
29class QDomImplementationPrivate;
30class QDomElementPrivate;
31class QDomNotationPrivate;
32class QDomEntityPrivate;
33class QDomEntityReferencePrivate;
34class QDomProcessingInstructionPrivate;
36class QDomCharacterDataPrivate;
38class QDomCommentPrivate;
39class QDomCDATASectionPrivate;
40class QDomNamedNodeMapPrivate;
41class QDomImplementationPrivate;
47class QDomCDATASection;
48class QDomProcessingInstruction;
50class QDomEntityReference;
52class QDomNamedNodeMap;
54class QDomDocumentFragment;
55class QDomDocumentType;
56class QDomImplementation;
60class QDomCharacterData;
61class QXmlStreamReader;
63class Q_XML_EXPORT 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;
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);
78 enum InvalidDataPolicy { AcceptInvalidChars = 0, DropInvalidChars, ReturnNullNode };
79 static InvalidDataPolicy invalidDataPolicy();
80 static void setInvalidDataPolicy(InvalidDataPolicy policy);
86 QDomImplementationPrivate* impl;
87 QDomImplementation(QDomImplementationPrivate*);
89 friend class QDomDocument;
92class Q_XML_EXPORT QDomNode
100 EntityReferenceNode = 5,
102 ProcessingInstructionNode = 7,
105 DocumentTypeNode = 10,
106 DocumentFragmentNode = 11,
109 CharacterDataNode = 22
114 EncodingFromDocument = 1,
115 EncodingFromTextStream = 2
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;
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;
134 bool isSupported(
const QString& feature,
const QString& version)
const;
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;
152 QString nodeValue()
const;
153 void setNodeValue(
const QString &value);
154 QString prefix()
const;
155 void setPrefix(
const QString& pre);
159 bool isCDATASection()
const;
160 bool isDocumentFragment()
const;
161 bool isDocument()
const;
162 bool isDocumentType()
const;
163 bool isElement()
const;
164 bool isEntityReference()
const;
166 bool isEntity()
const;
167 bool isNotation()
const;
168 bool isProcessingInstruction()
const;
169 bool isCharacterData()
const;
170 bool isComment()
const;
173
174
175
176 QDomNode namedItem(
const QString& name)
const;
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;
195 void save(QTextStream&,
int, EncodingPolicy=QDomNode::EncodingFromDocument)
const;
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;
202 int lineNumber()
const;
203 int columnNumber()
const;
206 QDomNodePrivate* impl;
207 QDomNode(QDomNodePrivate*);
210 friend class ::tst_QDom;
211 friend class QDomDocument;
212 friend class QDomDocumentType;
213 friend class QDomNodeList;
214 friend class QDomNamedNodeMap;
217class Q_XML_EXPORT 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;
230 QDomNode item(
int index)
const;
231 inline QDomNode at(
int index)
const {
return item(index); }
235 inline int count()
const {
return length(); }
236 inline int size()
const {
return length(); }
237 inline bool isEmpty()
const {
return length() == 0; }
240 Q_XML_EXPORT
friend bool comparesEqual(
const QDomNodeList &lhs,
const QDomNodeList &rhs)
noexcept;
241 Q_DECLARE_EQUALITY_COMPARABLE(QDomNodeList)
243 int noexceptLength()
const noexcept;
247 const QDomNodeListPrivate *parent;
248 QDomNodePrivate *current;
250 friend class QDomNodeList;
251 friend class QDomNodeListPrivate;
252 Q_XML_EXPORT It(
const QDomNodeListPrivate *lp,
bool start)
noexcept;
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);
258 Q_XML_EXPORT
static QDomNodePrivate *findNextInOrder(
const QDomNodeListPrivate *parent, QDomNodePrivate *current);
259 Q_XML_EXPORT
static QDomNodePrivate *findPrevInOrder(
const QDomNodeListPrivate *parent, QDomNodePrivate *current);
265 using iterator_category = std::bidirectional_iterator_tag;
266 using value_type = QDomNode;
267 using element_type =
const QDomNode;
268 using difference_type = qptrdiff;
269 using reference = value_type;
270 using pointer = QtPrivate::ArrowProxy<reference>;
272 reference operator*()
const {
return QDomNode(current); }
273 pointer operator->()
const {
return { **
this }; }
275 It &operator++() { current = findNextInOrder(parent, current);
return *
this; }
276 It operator++(
int) {
auto copy = *
this; ++*
this;
return copy; }
278 It &operator--() { current = findPrevInOrder(parent, current);
return *
this; }
279 It operator--(
int) {
auto copy = *
this; --*
this;
return copy; }
283 using const_iterator = It;
284 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
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;
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(); }
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(); }
303 [[nodiscard]] const_iterator constBegin()
const noexcept {
return begin(); }
304 [[nodiscard]] const_iterator constEnd()
const noexcept {
return end(); }
307 QDomNodeListPrivate* impl;
308 QDomNodeList(QDomNodeListPrivate*);
310 friend class QDomNode;
311 friend class QDomElement;
312 friend class QDomDocument;
313 friend class ::tst_QDom;
316class Q_XML_EXPORT QDomDocumentType :
public QDomNode
320 QDomDocumentType(
const QDomDocumentType &documentType);
321 QDomDocumentType& operator=(
const QDomDocumentType &other);
324 QString name()
const;
325 QDomNamedNodeMap entities()
const;
326 QDomNamedNodeMap notations()
const;
327 QString publicId()
const;
328 QString systemId()
const;
329 QString internalSubset()
const;
332 inline QDomNode::NodeType nodeType()
const {
return DocumentTypeNode; }
335 QDomDocumentType(QDomDocumentTypePrivate*);
337 friend class QDomImplementation;
338 friend class QDomDocument;
339 friend class QDomNode;
340 friend class ::tst_QDom;
343class Q_XML_EXPORT QDomDocument :
public QDomNode
346 enum class ParseOption {
348 UseNamespaceProcessing = 0x01,
349 PreserveSpacingOnlyNodes = 0x02,
351 Q_DECLARE_FLAGS(ParseOptions, ParseOption)
355 QString errorMessage;
356 qsizetype errorLine = 0;
357 qsizetype errorColumn = 0;
359 explicit operator
bool()
const noexcept {
return errorMessage.isEmpty(); }
363 explicit QDomDocument(
const QString& name);
364 explicit QDomDocument(
const QDomDocumentType& doctype);
365 QDomDocument(
const QDomDocument &document);
366 QDomDocument& operator=(
const QDomDocument &other);
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);
386 QDomDocumentType doctype()
const;
387 QDomImplementation implementation()
const;
388 QDomElement documentElement()
const;
391 inline QDomNode::NodeType nodeType()
const {
return DocumentNode; }
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);
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);
420 QString toString(
int indent = 1)
const;
421 QByteArray toByteArray(
int indent = 1)
const;
424 ParseResult setContentImpl(
const QByteArray &data, ParseOptions options);
426 QDomDocument(QDomDocumentPrivate*);
428 friend class QDomNode;
431class Q_XML_EXPORT 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;
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);
452 int count()
const {
return length(); }
453 inline int size()
const {
return length(); }
454 inline bool isEmpty()
const {
return length() == 0; }
457 bool contains(
const QString& name)
const;
460 QDomNamedNodeMapPrivate* impl;
461 QDomNamedNodeMap(QDomNamedNodeMapPrivate*);
463 friend class QDomNode;
464 friend class QDomDocumentType;
465 friend class QDomElement;
468class Q_XML_EXPORT QDomDocumentFragment :
public QDomNode
471 QDomDocumentFragment();
472 QDomDocumentFragment(
const QDomDocumentFragment &documentFragment);
473 QDomDocumentFragment& operator=(
const QDomDocumentFragment &other);
476 inline QDomNode::NodeType nodeType()
const {
return DocumentFragmentNode; }
479 QDomDocumentFragment(QDomDocumentFragmentPrivate*);
481 friend class QDomDocument;
482 friend class QDomNode;
485class Q_XML_EXPORT QDomCharacterData :
public QDomNode
489 QDomCharacterData(
const QDomCharacterData &characterData);
490 QDomCharacterData& operator=(
const QDomCharacterData &other);
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);
503 QString data()
const;
504 void setData(
const QString &data);
507 QDomNode::NodeType nodeType()
const;
510 QDomCharacterData(QDomCharacterDataPrivate*);
512 friend class QDomDocument;
513 friend class QDomText;
514 friend class QDomComment;
515 friend class QDomNode;
518class Q_XML_EXPORT QDomAttr :
public QDomNode
522 QDomAttr(
const QDomAttr &attr);
523 QDomAttr& operator=(
const QDomAttr &other);
526 QString name()
const;
527 bool specified()
const;
528 QDomElement ownerElement()
const;
531 QString value()
const;
532 void setValue(
const QString &value);
535 inline QDomNode::NodeType nodeType()
const {
return AttributeNode; }
538 QDomAttr(QDomAttrPrivate*);
540 friend class QDomDocument;
541 friend class QDomElement;
542 friend class QDomNode;
545class Q_XML_EXPORT QDomElement :
public QDomNode
549 QDomElement(
const QDomElement &element);
550 QDomElement& operator=(
const QDomElement &other);
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, qlonglong(value)); }
559 inline void setAttribute(
const QString& name, uint value)
560 { setAttribute(name, 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;
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, qlonglong(value)); }
574 inline void setAttributeNS(
const QString& nsURI,
const QString& qName, uint value)
575 { setAttributeNS(nsURI, qName, 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;
586 QString tagName()
const;
587 void setTagName(
const QString& name);
590 QDomNamedNodeMap attributes()
const;
591 inline QDomNode::NodeType nodeType()
const {
return ElementNode; }
593 QString text()
const;
596 QDomElement(QDomElementPrivate*);
598 friend class QDomDocument;
599 friend class QDomNode;
600 friend class QDomAttr;
603class Q_XML_EXPORT QDomText :
public QDomCharacterData
607 QDomText(
const QDomText &text);
608 QDomText& operator=(
const QDomText &other);
611 QDomText splitText(
int offset);
614 inline QDomNode::NodeType nodeType()
const {
return TextNode; }
617 QDomText(QDomTextPrivate*);
619 friend class QDomCDATASection;
620 friend class QDomDocument;
621 friend class QDomNode;
624class Q_XML_EXPORT QDomComment :
public QDomCharacterData
628 QDomComment(
const QDomComment &comment);
629 QDomComment& operator=(
const QDomComment &other);
632 inline QDomNode::NodeType nodeType()
const {
return CommentNode; }
635 QDomComment(QDomCommentPrivate*);
637 friend class QDomDocument;
638 friend class QDomNode;
641class Q_XML_EXPORT QDomCDATASection :
public QDomText
645 QDomCDATASection(
const QDomCDATASection &cdataSection);
646 QDomCDATASection& operator=(
const QDomCDATASection &other);
649 inline QDomNode::NodeType nodeType()
const {
return CDATASectionNode; }
652 QDomCDATASection(QDomCDATASectionPrivate*);
654 friend class QDomDocument;
655 friend class QDomNode;
658class Q_XML_EXPORT QDomNotation :
public QDomNode
662 QDomNotation(
const QDomNotation ¬ation);
663 QDomNotation& operator=(
const QDomNotation &other);
666 QString publicId()
const;
667 QString systemId()
const;
670 inline QDomNode::NodeType nodeType()
const {
return NotationNode; }
673 QDomNotation(QDomNotationPrivate*);
675 friend class QDomDocument;
676 friend class QDomNode;
679class Q_XML_EXPORT QDomEntity :
public QDomNode
683 QDomEntity(
const QDomEntity &entity);
684 QDomEntity& operator=(
const QDomEntity &other);
687 QString publicId()
const;
688 QString systemId()
const;
689 QString notationName()
const;
692 inline QDomNode::NodeType nodeType()
const {
return EntityNode; }
695 QDomEntity(QDomEntityPrivate*);
697 friend class QDomNode;
700class Q_XML_EXPORT QDomEntityReference :
public QDomNode
703 QDomEntityReference();
704 QDomEntityReference(
const QDomEntityReference &entityReference);
705 QDomEntityReference& operator=(
const QDomEntityReference &other);
708 inline QDomNode::NodeType nodeType()
const {
return EntityReferenceNode; }
711 QDomEntityReference(QDomEntityReferencePrivate*);
713 friend class QDomDocument;
714 friend class QDomNode;
717class Q_XML_EXPORT QDomProcessingInstruction :
public QDomNode
720 QDomProcessingInstruction();
721 QDomProcessingInstruction(
const QDomProcessingInstruction &processingInstruction);
722 QDomProcessingInstruction& operator=(
const QDomProcessingInstruction &other);
725 QString target()
const;
728 QString data()
const;
729 void setData(
const QString &data);
732 inline QDomNode::NodeType nodeType()
const {
return ProcessingInstructionNode; }
735 QDomProcessingInstruction(QDomProcessingInstructionPrivate*);
737 friend class QDomDocument;
738 friend class QDomNode;
742Q_XML_EXPORT QTextStream& operator<<(QTextStream& stream,
const QDomNode& node);