123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- //
- // XMLReader.h
- //
- // Library: XML
- // Package: SAX
- // Module: SAX
- //
- // SAX2 XMLReader Interface.
- //
- // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef SAX_XMLReader_INCLUDED
- #define SAX_XMLReader_INCLUDED
- #include "Poco/XML/XML.h"
- #include "Poco/XML/XMLString.h"
- namespace Poco {
- namespace XML {
- class EntityResolver;
- class DTDHandler;
- class ContentHandler;
- class ErrorHandler;
- class InputSource;
- class LexicalHandler;
- class NamespaceHandler;
- class XML_API XMLReader
- /// Interface for reading an XML document using callbacks.
- /// XMLReader is the interface that an XML parser's SAX2 driver must
- /// implement. This interface allows an application to set and
- /// query features and properties in the parser, to register event handlers
- /// for document processing, and to initiate a document parse.
- /// All SAX interfaces are assumed to be synchronous: the parse methods must not
- /// return until parsing is complete, and readers
- /// must wait for an event-handler callback to return before reporting the next event.
- {
- public:
- virtual void setEntityResolver(EntityResolver* pResolver) = 0;
- /// Allow an application to register an entity resolver.
- ///
- /// If the application does not register an entity resolver, the
- /// XMLReader will perform its own default resolution.
- ///
- /// Applications may register a new or different resolver in the middle of a
- /// parse, and the SAX parser must begin using the new resolver immediately.
- virtual EntityResolver* getEntityResolver() const = 0;
- /// Return the current entity resolver.
- virtual void setDTDHandler(DTDHandler* pDTDHandler) = 0;
- /// Allow an application to register a DTD event handler.
- ///
- /// If the application does not register a DTD handler, all DTD events reported by
- /// the SAX parser will be silently ignored.
- ///
- /// Applications may register a new or different handler in the middle of a parse,
- /// and the SAX parser must begin using the new handler immediately.
- virtual DTDHandler* getDTDHandler() const = 0;
- /// Return the current DTD handler.
- virtual void setContentHandler(ContentHandler* pContentHandler) = 0;
- /// Allow an application to register a content event handler.
- ///
- /// If the application does not register a content handler, all content events
- /// reported by the SAX parser will be silently ignored.
- ///
- /// Applications may register a new or different handler in the middle of a parse,
- /// and the SAX parser must begin using the new handler immediately.
- virtual ContentHandler* getContentHandler() const = 0;
- /// Return the current content handler.
- virtual void setErrorHandler(ErrorHandler* pErrorHandler) = 0;
- /// Allow an application to register an error event handler.
- ///
- /// If the application does not register an error handler, all error events reported by
- /// the SAX parser will be silently ignored; however, normal processing may not continue.
- /// It is highly recommended that all SAX applications implement an error handler to avoid
- /// unexpected bugs.
- ///
- /// Applications may register a new or different handler in the middle of a parse, and the
- /// SAX parser must begin using the new handler immediately.
- virtual ErrorHandler* getErrorHandler() const = 0;
- /// Return the current error handler.
-
- virtual void setFeature(const XMLString& featureId, bool state) = 0;
- /// Set the state of a feature.
- ///
- /// The feature name is any fully-qualified URI. It is possible for an XMLReader to
- /// expose a feature value but to be unable to change the current value. Some feature
- /// values may be immutable or mutable only in specific contexts, such as before, during,
- /// or after a parse.
- ///
- /// All XMLReaders are required to support setting http://xml.org/sax/features/namespaces
- /// to true and http://xml.org/sax/features/namespace-prefixes to false.
- virtual bool getFeature(const XMLString& featureId) const = 0;
- /// Look up the value of a feature.
- ///
- /// The feature name is any fully-qualified URI. It is possible for an XMLReader
- /// to recognize a feature name but temporarily be unable to return its value.
- /// Some feature values may be available only in specific contexts, such as before,
- /// during, or after a parse. Also, some feature values may not be programmatically
- /// accessible. (In the case of an adapter for SAX1 Parser, there is no
- /// implementation-independent way to expose whether the underlying parser is performing
- /// validation, expanding external entities, and so forth.)
- ///
- /// All XMLReaders are required to recognize the
- /// http://xml.org/sax/features/namespaces and the
- /// http://xml.org/sax/features/namespace-prefixes feature names.
- /// Implementors are free (and encouraged) to invent their own features,
- /// using names built on their own URIs.
-
- virtual void setProperty(const XMLString& propertyId, const XMLString& value) = 0;
- /// Set the value of a property.
- ///
- /// The property name is any fully-qualified URI. It is possible for an XMLReader
- /// to recognize a property name but to be unable to change the current value.
- /// Some property values may be immutable or mutable only in specific contexts,
- /// such as before, during, or after a parse.
- ///
- /// XMLReaders are not required to recognize setting any specific property names, though a
- /// core set is defined by SAX2.
- ///
- /// This method is also the standard mechanism for setting extended handlers.
- virtual void setProperty(const XMLString& propertyId, void* value) = 0;
- /// Set the value of a property.
- /// See also setProperty(const XMLString&, const XMLString&).
- virtual void* getProperty(const XMLString& propertyId) const = 0;
- /// Look up the value of a property.
- /// String values are returned as XMLChar*
- /// The property name is any fully-qualified URI. It is possible for an XMLReader to
- /// recognize a property name but temporarily be unable to return its value. Some property
- /// values may be available only in specific contexts, such as before, during, or after a parse.
- ///
- /// XMLReaders are not required to recognize any specific property names, though an initial
- /// core set is documented for SAX2.
- ///
- /// Implementors are free (and encouraged) to invent their own properties, using names
- /// built on their own URIs.
- virtual void parse(InputSource* pSource) = 0;
- /// Parse an XML document.
- ///
- /// The application can use this method to instruct the XML reader to begin parsing an
- /// XML document from any valid input source (a character stream, a byte stream, or a URI).
- ///
- /// Applications may not invoke this method while a parse is in progress (they should create
- /// a new XMLReader instead for each nested XML document). Once a parse is complete, an
- /// application may reuse the same XMLReader object, possibly with a different input source.
- /// Configuration of the XMLReader object (such as handler bindings and values established for
- /// feature flags and properties) is unchanged by completion of a parse, unless the definition of that
- /// aspect of the configuration explicitly specifies other behavior. (For example, feature flags or
- /// properties exposing characteristics of the document being parsed.)
- ///
- /// During the parse, the XMLReader will provide information about the XML document through the registered
- /// event handlers.
- ///
- /// This method is synchronous: it will not return until parsing has ended. If a client application
- /// wants to terminate parsing early, it should throw an exception.
- virtual void parse(const XMLString& systemId) = 0;
- /// Parse an XML document from a system identifier.
- /// See also parse(InputSource*).
-
- virtual void parseMemoryNP(const char* xml, std::size_t size) = 0;
- /// Parse an XML document from memory.
- /// See also parse(InputSource*).
- // SAX Features
- static const XMLString FEATURE_VALIDATION;
- static const XMLString FEATURE_NAMESPACES;
- static const XMLString FEATURE_NAMESPACE_PREFIXES;
- static const XMLString FEATURE_EXTERNAL_GENERAL_ENTITIES;
- static const XMLString FEATURE_EXTERNAL_PARAMETER_ENTITIES;
- static const XMLString FEATURE_STRING_INTERNING;
-
- // SAX Properties
- static const XMLString PROPERTY_DECLARATION_HANDLER;
- static const XMLString PROPERTY_LEXICAL_HANDLER;
- protected:
- virtual ~XMLReader();
- };
- } } // namespace Poco::XML
- #endif // SAX_XMLReader_INCLUDED
|