qxml.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:14k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtXML module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QXML_H
  38. #define QXML_H
  39. #include <QtCore/qtextstream.h>
  40. #include <QtCore/qfile.h>
  41. #include <QtCore/qstring.h>
  42. #include <QtCore/qstringlist.h>
  43. #include <QtCore/qlist.h>
  44. QT_BEGIN_HEADER
  45. QT_BEGIN_NAMESPACE
  46. QT_MODULE(Xml)
  47. class QXmlNamespaceSupport;
  48. class QXmlAttributes;
  49. class QXmlContentHandler;
  50. class QXmlDefaultHandler;
  51. class QXmlDTDHandler;
  52. class QXmlEntityResolver;
  53. class QXmlErrorHandler;
  54. class QXmlLexicalHandler;
  55. class QXmlDeclHandler;
  56. class QXmlInputSource;
  57. class QXmlLocator;
  58. class QXmlNamespaceSupport;
  59. class QXmlParseException;
  60. class QXmlReader;
  61. class QXmlSimpleReader;
  62. class QXmlSimpleReaderPrivate;
  63. class QXmlNamespaceSupportPrivate;
  64. class QXmlAttributesPrivate;
  65. class QXmlInputSourcePrivate;
  66. class QXmlParseExceptionPrivate;
  67. class QXmlLocatorPrivate;
  68. class QXmlDefaultHandlerPrivate;
  69. //
  70. // SAX Namespace Support
  71. //
  72. class Q_XML_EXPORT QXmlNamespaceSupport
  73. {
  74. public:
  75.     QXmlNamespaceSupport();
  76.     ~QXmlNamespaceSupport();
  77.     void setPrefix(const QString&, const QString&);
  78.     QString prefix(const QString&) const;
  79.     QString uri(const QString&) const;
  80.     void splitName(const QString&, QString&, QString&) const;
  81.     void processName(const QString&, bool, QString&, QString&) const;
  82.     QStringList prefixes() const;
  83.     QStringList prefixes(const QString&) const;
  84.     void pushContext();
  85.     void popContext();
  86.     void reset();
  87. private:
  88.     QXmlNamespaceSupportPrivate *d;
  89.     friend class QXmlSimpleReaderPrivate;
  90.     Q_DISABLE_COPY(QXmlNamespaceSupport)
  91. };
  92. //
  93. // SAX Attributes
  94. //
  95. class Q_XML_EXPORT QXmlAttributes
  96. {
  97. public:
  98.     QXmlAttributes() {}
  99.     virtual ~QXmlAttributes() {}
  100.     int index(const QString& qName) const;
  101.     int index(const QLatin1String& qName) const;
  102.     int index(const QString& uri, const QString& localPart) const;
  103.     int length() const;
  104.     int count() const;
  105.     QString localName(int index) const;
  106.     QString qName(int index) const;
  107.     QString uri(int index) const;
  108.     QString type(int index) const;
  109.     QString type(const QString& qName) const;
  110.     QString type(const QString& uri, const QString& localName) const;
  111.     QString value(int index) const;
  112.     QString value(const QString& qName) const;
  113.     QString value(const QLatin1String& qName) const;
  114.     QString value(const QString& uri, const QString& localName) const;
  115.     void clear();
  116.     void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value);
  117. private:
  118.     struct Attribute {
  119.         QString qname, uri, localname, value;
  120.     };
  121.     typedef QList<Attribute> AttributeList;
  122.     AttributeList attList;
  123.     QXmlAttributesPrivate *d;
  124. };
  125. //
  126. // SAX Input Source
  127. //
  128. class Q_XML_EXPORT QXmlInputSource
  129. {
  130. public:
  131.     QXmlInputSource();
  132.     QXmlInputSource(QIODevice *dev);
  133.     virtual ~QXmlInputSource();
  134.     virtual void setData(const QString& dat);
  135.     virtual void setData(const QByteArray& dat);
  136.     virtual void fetchData();
  137.     virtual QString data() const;
  138.     virtual QChar next();
  139.     virtual void reset();
  140.     static const ushort EndOfData;
  141.     static const ushort EndOfDocument;
  142. #ifdef QT3_SUPPORT
  143.     QT3_SUPPORT_CONSTRUCTOR QXmlInputSource(QFile& file);
  144.     QT3_SUPPORT_CONSTRUCTOR QXmlInputSource(QTextStream& stream);
  145. #endif
  146. protected:
  147.     virtual QString fromRawData(const QByteArray &data, bool beginning = false);
  148. private:
  149.     void init();
  150.     QXmlInputSourcePrivate *d;
  151. };
  152. //
  153. // SAX Exception Classes
  154. //
  155. class Q_XML_EXPORT QXmlParseException
  156. {
  157. public:
  158.     explicit QXmlParseException(const QString &name = QString(), int c = -1, int l = -1,
  159.                                 const QString &p = QString(), const QString &s = QString());
  160.     ~QXmlParseException();
  161.     int columnNumber() const;
  162.     int lineNumber() const;
  163.     QString publicId() const;
  164.     QString systemId() const;
  165.     QString message() const;
  166. private:
  167.     QXmlParseExceptionPrivate *d;
  168. };
  169. //
  170. // XML Reader
  171. //
  172. class Q_XML_EXPORT QXmlReader
  173. {
  174. public:
  175.     virtual ~QXmlReader() {}
  176.     virtual bool feature(const QString& name, bool *ok = 0) const = 0;
  177.     virtual void setFeature(const QString& name, bool value) = 0;
  178.     virtual bool hasFeature(const QString& name) const = 0;
  179.     virtual void* property(const QString& name, bool *ok = 0) const = 0;
  180.     virtual void setProperty(const QString& name, void* value) = 0;
  181.     virtual bool hasProperty(const QString& name) const = 0;
  182.     virtual void setEntityResolver(QXmlEntityResolver* handler) = 0;
  183.     virtual QXmlEntityResolver* entityResolver() const = 0;
  184.     virtual void setDTDHandler(QXmlDTDHandler* handler) = 0;
  185.     virtual QXmlDTDHandler* DTDHandler() const = 0;
  186.     virtual void setContentHandler(QXmlContentHandler* handler) = 0;
  187.     virtual QXmlContentHandler* contentHandler() const = 0;
  188.     virtual void setErrorHandler(QXmlErrorHandler* handler) = 0;
  189.     virtual QXmlErrorHandler* errorHandler() const = 0;
  190.     virtual void setLexicalHandler(QXmlLexicalHandler* handler) = 0;
  191.     virtual QXmlLexicalHandler* lexicalHandler() const = 0;
  192.     virtual void setDeclHandler(QXmlDeclHandler* handler) = 0;
  193.     virtual QXmlDeclHandler* declHandler() const = 0;
  194.     virtual bool parse(const QXmlInputSource& input) = 0;
  195.     virtual bool parse(const QXmlInputSource* input) = 0;
  196. };
  197. class Q_XML_EXPORT QXmlSimpleReader : public QXmlReader
  198. {
  199. public:
  200.     QXmlSimpleReader();
  201.     virtual ~QXmlSimpleReader();
  202.     bool feature(const QString& name, bool *ok = 0) const;
  203.     void setFeature(const QString& name, bool value);
  204.     bool hasFeature(const QString& name) const;
  205.     void* property(const QString& name, bool *ok = 0) const;
  206.     void setProperty(const QString& name, void* value);
  207.     bool hasProperty(const QString& name) const;
  208.     void setEntityResolver(QXmlEntityResolver* handler);
  209.     QXmlEntityResolver* entityResolver() const;
  210.     void setDTDHandler(QXmlDTDHandler* handler);
  211.     QXmlDTDHandler* DTDHandler() const;
  212.     void setContentHandler(QXmlContentHandler* handler);
  213.     QXmlContentHandler* contentHandler() const;
  214.     void setErrorHandler(QXmlErrorHandler* handler);
  215.     QXmlErrorHandler* errorHandler() const;
  216.     void setLexicalHandler(QXmlLexicalHandler* handler);
  217.     QXmlLexicalHandler* lexicalHandler() const;
  218.     void setDeclHandler(QXmlDeclHandler* handler);
  219.     QXmlDeclHandler* declHandler() const;
  220.     bool parse(const QXmlInputSource& input);
  221.     bool parse(const QXmlInputSource* input);
  222.     virtual bool parse(const QXmlInputSource* input, bool incremental);
  223.     virtual bool parseContinue();
  224. private:
  225.     Q_DISABLE_COPY(QXmlSimpleReader)
  226.     Q_DECLARE_PRIVATE(QXmlSimpleReader)
  227.     QXmlSimpleReaderPrivate* d_ptr;
  228.     friend class QXmlSimpleReaderLocator;
  229. };
  230. //
  231. // SAX Locator
  232. //
  233. class Q_XML_EXPORT QXmlLocator
  234. {
  235. public:
  236.     QXmlLocator();
  237.     virtual ~QXmlLocator();
  238.     virtual int columnNumber() const = 0;
  239.     virtual int lineNumber() const = 0;
  240. //    QString getPublicId() const
  241. //    QString getSystemId() const
  242. };
  243. //
  244. // SAX handler classes
  245. //
  246. class Q_XML_EXPORT QXmlContentHandler
  247. {
  248. public:
  249.     virtual ~QXmlContentHandler() {}
  250.     virtual void setDocumentLocator(QXmlLocator* locator) = 0;
  251.     virtual bool startDocument() = 0;
  252.     virtual bool endDocument() = 0;
  253.     virtual bool startPrefixMapping(const QString& prefix, const QString& uri) = 0;
  254.     virtual bool endPrefixMapping(const QString& prefix) = 0;
  255.     virtual bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) = 0;
  256.     virtual bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) = 0;
  257.     virtual bool characters(const QString& ch) = 0;
  258.     virtual bool ignorableWhitespace(const QString& ch) = 0;
  259.     virtual bool processingInstruction(const QString& target, const QString& data) = 0;
  260.     virtual bool skippedEntity(const QString& name) = 0;
  261.     virtual QString errorString() const = 0;
  262. };
  263. class Q_XML_EXPORT QXmlErrorHandler
  264. {
  265. public:
  266.     virtual ~QXmlErrorHandler() {}
  267.     virtual bool warning(const QXmlParseException& exception) = 0;
  268.     virtual bool error(const QXmlParseException& exception) = 0;
  269.     virtual bool fatalError(const QXmlParseException& exception) = 0;
  270.     virtual QString errorString() const = 0;
  271. };
  272. class Q_XML_EXPORT QXmlDTDHandler
  273. {
  274. public:
  275.     virtual ~QXmlDTDHandler() {}
  276.     virtual bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
  277.     virtual bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) = 0;
  278.     virtual QString errorString() const = 0;
  279. };
  280. class Q_XML_EXPORT QXmlEntityResolver
  281. {
  282. public:
  283.     virtual ~QXmlEntityResolver() {}
  284.     virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0;
  285.     virtual QString errorString() const = 0;
  286. };
  287. class Q_XML_EXPORT QXmlLexicalHandler
  288. {
  289. public:
  290.     virtual ~QXmlLexicalHandler() {}
  291.     virtual bool startDTD(const QString& name, const QString& publicId, const QString& systemId) = 0;
  292.     virtual bool endDTD() = 0;
  293.     virtual bool startEntity(const QString& name) = 0;
  294.     virtual bool endEntity(const QString& name) = 0;
  295.     virtual bool startCDATA() = 0;
  296.     virtual bool endCDATA() = 0;
  297.     virtual bool comment(const QString& ch) = 0;
  298.     virtual QString errorString() const = 0;
  299. };
  300. class Q_XML_EXPORT QXmlDeclHandler
  301. {
  302. public:
  303.     virtual ~QXmlDeclHandler() {}
  304.     virtual bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) = 0;
  305.     virtual bool internalEntityDecl(const QString& name, const QString& value) = 0;
  306.     virtual bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
  307.     virtual QString errorString() const = 0;
  308.     // ### Qt 5: Conform to SAX by adding elementDecl
  309. };
  310. class Q_XML_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler
  311. {
  312. public:
  313.     QXmlDefaultHandler() { }
  314.     virtual ~QXmlDefaultHandler() { }
  315.     void setDocumentLocator(QXmlLocator* locator);
  316.     bool startDocument();
  317.     bool endDocument();
  318.     bool startPrefixMapping(const QString& prefix, const QString& uri);
  319.     bool endPrefixMapping(const QString& prefix);
  320.     bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
  321.     bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName);
  322.     bool characters(const QString& ch);
  323.     bool ignorableWhitespace(const QString& ch);
  324.     bool processingInstruction(const QString& target, const QString& data);
  325.     bool skippedEntity(const QString& name);
  326.     bool warning(const QXmlParseException& exception);
  327.     bool error(const QXmlParseException& exception);
  328.     bool fatalError(const QXmlParseException& exception);
  329.     bool notationDecl(const QString& name, const QString& publicId, const QString& systemId);
  330.     bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName);
  331.     bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret);
  332.     bool startDTD(const QString& name, const QString& publicId, const QString& systemId);
  333.     bool endDTD();
  334.     bool startEntity(const QString& name);
  335.     bool endEntity(const QString& name);
  336.     bool startCDATA();
  337.     bool endCDATA();
  338.     bool comment(const QString& ch);
  339.     bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value);
  340.     bool internalEntityDecl(const QString& name, const QString& value);
  341.     bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId);
  342.     QString errorString() const;
  343. private:
  344.     QXmlDefaultHandlerPrivate *d;
  345.     Q_DISABLE_COPY(QXmlDefaultHandler)
  346. };
  347. // inlines
  348. inline int QXmlAttributes::count() const
  349. { return length(); }
  350. QT_END_NAMESPACE
  351. QT_END_HEADER
  352. #endif // QXML_H