1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtXml module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
45 #include <QtCore/qstring.h>
57 class QXmlInputSource;
60 class QDomDocumentPrivate;
61 class QDomDocumentTypePrivate;
62 class QDomDocumentFragmentPrivate;
63 class QDomNodePrivate;
64 class QDomNodeListPrivate;
65 class QDomImplementationPrivate;
66 class QDomElementPrivate;
67 class QDomNotationPrivate;
68 class QDomEntityPrivate;
69 class QDomEntityReferencePrivate;
70 class QDomProcessingInstructionPrivate;
71 class QDomAttrPrivate;
72 class QDomCharacterDataPrivate;
73 class QDomTextPrivate;
74 class QDomCommentPrivate;
75 class QDomCDATASectionPrivate;
76 class QDomNamedNodeMapPrivate;
77 class QDomImplementationPrivate;
83 class QDomCDATASection;
84 class QDomProcessingInstruction;
86 class QDomEntityReference;
88 class QDomNamedNodeMap;
90 class QDomDocumentFragment;
91 class QDomDocumentType;
92 class QDomImplementation;
96 class QDomCharacterData;
98 class Q_XML_EXPORT QDomImplementation
101 QDomImplementation();
102 QDomImplementation(const QDomImplementation&);
103 ~QDomImplementation();
104 QDomImplementation& operator= (const QDomImplementation&);
105 bool operator== (const QDomImplementation&) const;
106 bool operator!= (const QDomImplementation&) const;
109 bool hasFeature(const QString& feature, const QString& version) const;
110 QDomDocumentType createDocumentType(const QString& qName, const QString& publicId, const QString& systemId);
111 QDomDocument createDocument(const QString& nsURI, const QString& qName, const QDomDocumentType& doctype);
113 enum InvalidDataPolicy { AcceptInvalidChars = 0, DropInvalidChars, ReturnNullNode };
114 static InvalidDataPolicy invalidDataPolicy();
115 static void setInvalidDataPolicy(InvalidDataPolicy policy);
121 QDomImplementationPrivate* impl;
122 QDomImplementation(QDomImplementationPrivate*);
124 friend class QDomDocument;
127 class Q_XML_EXPORT QDomNode
134 CDATASectionNode = 4,
135 EntityReferenceNode = 5,
137 ProcessingInstructionNode = 7,
140 DocumentTypeNode = 10,
141 DocumentFragmentNode = 11,
143 BaseNode = 21,// this is not in the standard
144 CharacterDataNode = 22 // this is not in the standard
149 EncodingFromDocument = 1,
150 EncodingFromTextStream = 2
154 QDomNode(const QDomNode&);
155 QDomNode& operator= (const QDomNode&);
156 bool operator== (const QDomNode&) const;
157 bool operator!= (const QDomNode&) const;
161 QDomNode insertBefore(const QDomNode& newChild, const QDomNode& refChild);
162 QDomNode insertAfter(const QDomNode& newChild, const QDomNode& refChild);
163 QDomNode replaceChild(const QDomNode& newChild, const QDomNode& oldChild);
164 QDomNode removeChild(const QDomNode& oldChild);
165 QDomNode appendChild(const QDomNode& newChild);
166 bool hasChildNodes() const;
167 QDomNode cloneNode(bool deep = true) const;
169 bool isSupported(const QString& feature, const QString& version) const;
171 // DOM read-only attributes
172 QString nodeName() const;
173 NodeType nodeType() const;
174 QDomNode parentNode() const;
175 QDomNodeList childNodes() const;
176 QDomNode firstChild() const;
177 QDomNode lastChild() const;
178 QDomNode previousSibling() const;
179 QDomNode nextSibling() const;
180 QDomNamedNodeMap attributes() const;
181 QDomDocument ownerDocument() const;
182 QString namespaceURI() const;
183 QString localName() const;
184 bool hasAttributes() const;
187 QString nodeValue() const;
188 void setNodeValue(const QString&);
189 QString prefix() const;
190 void setPrefix(const QString& pre);
194 bool isCDATASection() const;
195 bool isDocumentFragment() const;
196 bool isDocument() const;
197 bool isDocumentType() const;
198 bool isElement() const;
199 bool isEntityReference() const;
201 bool isEntity() const;
202 bool isNotation() const;
203 bool isProcessingInstruction() const;
204 bool isCharacterData() const;
205 bool isComment() const;
208 * Shortcut to avoid dealing with QDomNodeList
211 QDomNode namedItem(const QString& name) const;
216 QDomAttr toAttr() const;
217 QDomCDATASection toCDATASection() const;
218 QDomDocumentFragment toDocumentFragment() const;
219 QDomDocument toDocument() const;
220 QDomDocumentType toDocumentType() const;
221 QDomElement toElement() const;
222 QDomEntityReference toEntityReference() const;
223 QDomText toText() const;
224 QDomEntity toEntity() const;
225 QDomNotation toNotation() const;
226 QDomProcessingInstruction toProcessingInstruction() const;
227 QDomCharacterData toCharacterData() const;
228 QDomComment toComment() const;
230 void save(QTextStream&, int) const;
231 void save(QTextStream&, int, EncodingPolicy) const; // ### Qt 5: Merge overload(if we at all keep this)
233 QDomElement firstChildElement(const QString &tagName = QString()) const;
234 QDomElement lastChildElement(const QString &tagName = QString()) const;
235 QDomElement previousSiblingElement(const QString &tagName = QString()) const;
236 QDomElement nextSiblingElement(const QString &taName = QString()) const;
238 int lineNumber() const;
239 int columnNumber() const;
242 QDomNodePrivate* impl;
243 QDomNode(QDomNodePrivate*);
246 friend class QDomDocument;
247 friend class QDomDocumentType;
248 friend class QDomNodeList;
249 friend class QDomNamedNodeMap;
252 class Q_XML_EXPORT QDomNodeList
256 QDomNodeList(const QDomNodeList&);
257 QDomNodeList& operator= (const QDomNodeList&);
258 bool operator== (const QDomNodeList&) const;
259 bool operator!= (const QDomNodeList&) const;
263 QDomNode item(int index) const;
264 inline QDomNode at(int index) const { return item(index); } // Qt API consistency
266 // DOM read only attributes
268 inline int count() const { return length(); } // Qt API consitancy
269 inline int size() const { return length(); } // Qt API consistency
270 inline bool isEmpty() const { return length() == 0; } // Qt API consistency
273 QDomNodeListPrivate* impl;
274 QDomNodeList(QDomNodeListPrivate*);
276 friend class QDomNode;
277 friend class QDomElement;
278 friend class QDomDocument;
281 class Q_XML_EXPORT QDomDocumentType : public QDomNode
285 QDomDocumentType(const QDomDocumentType& x);
286 QDomDocumentType& operator= (const QDomDocumentType&);
288 // DOM read only attributes
289 QString name() const;
290 QDomNamedNodeMap entities() const;
291 QDomNamedNodeMap notations() const;
292 QString publicId() const;
293 QString systemId() const;
294 QString internalSubset() const;
296 // Overridden from QDomNode
297 inline QDomNode::NodeType nodeType() const { return DocumentTypeNode; }
300 QDomDocumentType(QDomDocumentTypePrivate*);
302 friend class QDomImplementation;
303 friend class QDomDocument;
304 friend class QDomNode;
307 class Q_XML_EXPORT QDomDocument : public QDomNode
311 explicit QDomDocument(const QString& name);
312 explicit QDomDocument(const QDomDocumentType& doctype);
313 QDomDocument(const QDomDocument& x);
314 QDomDocument& operator= (const QDomDocument&);
318 QDomElement createElement(const QString& tagName);
319 QDomDocumentFragment createDocumentFragment();
320 QDomText createTextNode(const QString& data);
321 QDomComment createComment(const QString& data);
322 QDomCDATASection createCDATASection(const QString& data);
323 QDomProcessingInstruction createProcessingInstruction(const QString& target, const QString& data);
324 QDomAttr createAttribute(const QString& name);
325 QDomEntityReference createEntityReference(const QString& name);
326 QDomNodeList elementsByTagName(const QString& tagname) const;
327 QDomNode importNode(const QDomNode& importedNode, bool deep);
328 QDomElement createElementNS(const QString& nsURI, const QString& qName);
329 QDomAttr createAttributeNS(const QString& nsURI, const QString& qName);
330 QDomNodeList elementsByTagNameNS(const QString& nsURI, const QString& localName);
331 QDomElement elementById(const QString& elementId);
333 // DOM read only attributes
334 QDomDocumentType doctype() const;
335 QDomImplementation implementation() const;
336 QDomElement documentElement() const;
338 // Overridden from QDomNode
339 inline QDomNode::NodeType nodeType() const { return DocumentNode; }
342 bool setContent(const QByteArray& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
343 bool setContent(const QString& text, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
344 bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
345 bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
346 bool setContent(const QByteArray& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
347 bool setContent(const QString& text, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
348 bool setContent(QIODevice* dev, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
349 bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg=0, int *errorLine=0, int *errorColumn=0 );
352 QString toString(int = 1) const;
353 QByteArray toByteArray(int = 1) const;
356 QDomDocument(QDomDocumentPrivate*);
358 friend class QDomNode;
361 class Q_XML_EXPORT QDomNamedNodeMap
365 QDomNamedNodeMap(const QDomNamedNodeMap&);
366 QDomNamedNodeMap& operator= (const QDomNamedNodeMap&);
367 bool operator== (const QDomNamedNodeMap&) const;
368 bool operator!= (const QDomNamedNodeMap&) const;
372 QDomNode namedItem(const QString& name) const;
373 QDomNode setNamedItem(const QDomNode& newNode);
374 QDomNode removeNamedItem(const QString& name);
375 QDomNode item(int index) const;
376 QDomNode namedItemNS(const QString& nsURI, const QString& localName) const;
377 QDomNode setNamedItemNS(const QDomNode& newNode);
378 QDomNode removeNamedItemNS(const QString& nsURI, const QString& localName);
380 // DOM read only attributes
382 int count() const { return length(); } // Qt API consitancy
383 inline int size() const { return length(); } // Qt API consistency
384 inline bool isEmpty() const { return length() == 0; } // Qt API consistency
387 bool contains(const QString& name) const;
390 QDomNamedNodeMapPrivate* impl;
391 QDomNamedNodeMap(QDomNamedNodeMapPrivate*);
393 friend class QDomNode;
394 friend class QDomDocumentType;
395 friend class QDomElement;
398 class Q_XML_EXPORT QDomDocumentFragment : public QDomNode
401 QDomDocumentFragment();
402 QDomDocumentFragment(const QDomDocumentFragment& x);
403 QDomDocumentFragment& operator= (const QDomDocumentFragment&);
405 // Overridden from QDomNode
406 inline QDomNode::NodeType nodeType() const { return DocumentFragmentNode; }
409 QDomDocumentFragment(QDomDocumentFragmentPrivate*);
411 friend class QDomDocument;
412 friend class QDomNode;
415 class Q_XML_EXPORT QDomCharacterData : public QDomNode
419 QDomCharacterData(const QDomCharacterData& x);
420 QDomCharacterData& operator= (const QDomCharacterData&);
423 QString substringData(unsigned long offset, unsigned long count);
424 void appendData(const QString& arg);
425 void insertData(unsigned long offset, const QString& arg);
426 void deleteData(unsigned long offset, unsigned long count);
427 void replaceData(unsigned long offset, unsigned long count, const QString& arg);
429 // DOM read only attributes
433 QString data() const;
434 void setData(const QString&);
436 // Overridden from QDomNode
437 QDomNode::NodeType nodeType() const;
440 QDomCharacterData(QDomCharacterDataPrivate*);
442 friend class QDomDocument;
443 friend class QDomText;
444 friend class QDomComment;
445 friend class QDomNode;
448 class Q_XML_EXPORT QDomAttr : public QDomNode
452 QDomAttr(const QDomAttr& x);
453 QDomAttr& operator= (const QDomAttr&);
455 // DOM read only attributes
456 QString name() const;
457 bool specified() const;
458 QDomElement ownerElement() const;
461 QString value() const;
462 void setValue(const QString&);
464 // Overridden from QDomNode
465 inline QDomNode::NodeType nodeType() const { return AttributeNode; }
468 QDomAttr(QDomAttrPrivate*);
470 friend class QDomDocument;
471 friend class QDomElement;
472 friend class QDomNode;
475 class Q_XML_EXPORT QDomElement : public QDomNode
479 QDomElement(const QDomElement& x);
480 QDomElement& operator= (const QDomElement&);
483 QString attribute(const QString& name, const QString& defValue = QString() ) const;
484 void setAttribute(const QString& name, const QString& value);
485 void setAttribute(const QString& name, qlonglong value);
486 void setAttribute(const QString& name, qulonglong value);
487 inline void setAttribute(const QString& name, int value)
488 { setAttribute(name, qlonglong(value)); }
489 inline void setAttribute(const QString& name, uint value)
490 { setAttribute(name, qulonglong(value)); }
491 void setAttribute(const QString& name, float value);
492 void setAttribute(const QString& name, double value);
493 void removeAttribute(const QString& name);
494 QDomAttr attributeNode(const QString& name);
495 QDomAttr setAttributeNode(const QDomAttr& newAttr);
496 QDomAttr removeAttributeNode(const QDomAttr& oldAttr);
497 QDomNodeList elementsByTagName(const QString& tagname) const;
498 bool hasAttribute(const QString& name) const;
500 QString attributeNS(const QString nsURI, const QString& localName, const QString& defValue = QString()) const;
501 void setAttributeNS(const QString nsURI, const QString& qName, const QString& value);
502 inline void setAttributeNS(const QString nsURI, const QString& qName, int value)
503 { setAttributeNS(nsURI, qName, qlonglong(value)); }
504 inline void setAttributeNS(const QString nsURI, const QString& qName, uint value)
505 { setAttributeNS(nsURI, qName, qulonglong(value)); }
506 void setAttributeNS(const QString nsURI, const QString& qName, qlonglong value);
507 void setAttributeNS(const QString nsURI, const QString& qName, qulonglong value);
508 void setAttributeNS(const QString nsURI, const QString& qName, double value);
509 void removeAttributeNS(const QString& nsURI, const QString& localName);
510 QDomAttr attributeNodeNS(const QString& nsURI, const QString& localName);
511 QDomAttr setAttributeNodeNS(const QDomAttr& newAttr);
512 QDomNodeList elementsByTagNameNS(const QString& nsURI, const QString& localName) const;
513 bool hasAttributeNS(const QString& nsURI, const QString& localName) const;
515 // DOM read only attributes
516 QString tagName() const;
517 void setTagName(const QString& name); // Qt extension
519 // Overridden from QDomNode
520 QDomNamedNodeMap attributes() const;
521 inline QDomNode::NodeType nodeType() const { return ElementNode; }
523 QString text() const;
526 QDomElement(QDomElementPrivate*);
528 friend class QDomDocument;
529 friend class QDomNode;
530 friend class QDomAttr;
533 class Q_XML_EXPORT QDomText : public QDomCharacterData
537 QDomText(const QDomText& x);
538 QDomText& operator= (const QDomText&);
541 QDomText splitText(int offset);
543 // Overridden from QDomCharacterData
544 inline QDomNode::NodeType nodeType() const { return TextNode; }
547 QDomText(QDomTextPrivate*);
549 friend class QDomCDATASection;
550 friend class QDomDocument;
551 friend class QDomNode;
554 class Q_XML_EXPORT QDomComment : public QDomCharacterData
558 QDomComment(const QDomComment& x);
559 QDomComment& operator= (const QDomComment&);
561 // Overridden from QDomCharacterData
562 inline QDomNode::NodeType nodeType() const { return CommentNode; }
565 QDomComment(QDomCommentPrivate*);
567 friend class QDomDocument;
568 friend class QDomNode;
571 class Q_XML_EXPORT QDomCDATASection : public QDomText
575 QDomCDATASection(const QDomCDATASection& x);
576 QDomCDATASection& operator= (const QDomCDATASection&);
578 // Overridden from QDomText
579 inline QDomNode::NodeType nodeType() const { return CDATASectionNode; }
582 QDomCDATASection(QDomCDATASectionPrivate*);
584 friend class QDomDocument;
585 friend class QDomNode;
588 class Q_XML_EXPORT QDomNotation : public QDomNode
592 QDomNotation(const QDomNotation& x);
593 QDomNotation& operator= (const QDomNotation&);
595 // DOM read only attributes
596 QString publicId() const;
597 QString systemId() const;
599 // Overridden from QDomNode
600 inline QDomNode::NodeType nodeType() const { return NotationNode; }
603 QDomNotation(QDomNotationPrivate*);
605 friend class QDomDocument;
606 friend class QDomNode;
609 class Q_XML_EXPORT QDomEntity : public QDomNode
613 QDomEntity(const QDomEntity& x);
614 QDomEntity& operator= (const QDomEntity&);
616 // DOM read only attributes
617 QString publicId() const;
618 QString systemId() const;
619 QString notationName() const;
621 // Overridden from QDomNode
622 inline QDomNode::NodeType nodeType() const { return EntityNode; }
625 QDomEntity(QDomEntityPrivate*);
627 friend class QDomNode;
630 class Q_XML_EXPORT QDomEntityReference : public QDomNode
633 QDomEntityReference();
634 QDomEntityReference(const QDomEntityReference& x);
635 QDomEntityReference& operator= (const QDomEntityReference&);
637 // Overridden from QDomNode
638 inline QDomNode::NodeType nodeType() const { return EntityReferenceNode; }
641 QDomEntityReference(QDomEntityReferencePrivate*);
643 friend class QDomDocument;
644 friend class QDomNode;
647 class Q_XML_EXPORT QDomProcessingInstruction : public QDomNode
650 QDomProcessingInstruction();
651 QDomProcessingInstruction(const QDomProcessingInstruction& x);
652 QDomProcessingInstruction& operator= (const QDomProcessingInstruction&);
654 // DOM read only attributes
655 QString target() const;
658 QString data() const;
659 void setData(const QString& d);
661 // Overridden from QDomNode
662 inline QDomNode::NodeType nodeType() const { return ProcessingInstructionNode; }
665 QDomProcessingInstruction(QDomProcessingInstructionPrivate*);
667 friend class QDomDocument;
668 friend class QDomNode;
672 Q_XML_EXPORT QTextStream& operator<<(QTextStream&, const QDomNode&);