1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/xml/dom/xmlengdocument.h Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,573 @@
1.4 +/*
1.5 +* Copyright (c) 2004-2006 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description: Document node functions
1.18 +*
1.19 +*/
1.20 +
1.21 +
1.22 +
1.23 +
1.24 +
1.25 +
1.26 +#ifndef XMLENGINE_DOCUMENT_H_INCLUDED
1.27 +#define XMLENGINE_DOCUMENT_H_INCLUDED
1.28 +
1.29 +#include <f32file.h>
1.30 +
1.31 +#include "xmlengnode.h"
1.32 +#include "xmlengserializationoptions.h"
1.33 +
1.34 +// FORWARD DECLARATION
1.35 +class RXmlEngDOMImplementation;
1.36 +
1.37 +/**
1.38 + * Instance of RXmlEngDocument class represents an XML document in the DOM tree.
1.39 + *
1.40 + * Is a storage all nodes and information about XML data.
1.41 + *
1.42 + * @lib XmlEngineDOM.lib
1.43 + * @since S60 v3.1
1.44 + */
1.45 +class RXmlEngDocument : public TXmlEngNode
1.46 +{
1.47 +public:
1.48 + /**
1.49 + * Default constructor.
1.50 + *
1.51 + * Instance of RXmlEngDocument must be "opened" with one of OpenL() overloads.
1.52 + *
1.53 + * @since S60 v3.1
1.54 + */
1.55 + IMPORT_C RXmlEngDocument();
1.56 +
1.57 + /**
1.58 + * Opens the document.
1.59 + *
1.60 + * @since S60 v3.2
1.61 + * @param aDOMImpl DOM implementation object
1.62 + * @return KErrNone if succeed.
1.63 + */
1.64 + IMPORT_C void OpenL(RXmlEngDOMImplementation& aDOMImpl);
1.65 +
1.66 + /**
1.67 + * Opens the document.
1.68 + *
1.69 + * @since S60 v3.2
1.70 + * @param aDOMImpl DOM implementation object
1.71 + * @param aInternal Document pointer
1.72 + * @return KErrNone if succeed.
1.73 + */
1.74 + IMPORT_C void OpenL(RXmlEngDOMImplementation& aDOMImpl, void* aInternal);
1.75 +
1.76 + /**
1.77 + * Opens the document.
1.78 + *
1.79 + * @since S60 v3.2
1.80 + * @param aDOMImpl DOM implementation object
1.81 + * @param aRoot element taht will be root of the DOM tree
1.82 + * @return KErrNone if succeed.
1.83 + */
1.84 + IMPORT_C void OpenL(RXmlEngDOMImplementation& aDOMImpl, TXmlEngElement aRoot);
1.85 +
1.86 + /**
1.87 + * Closes document
1.88 + *
1.89 + * @since S60 v3.1
1.90 + */
1.91 + IMPORT_C void Close();
1.92 +
1.93 + /**
1.94 + * Serializes document tree into a file. For nodes containing binary data in the form of BinaryDataContainer,
1.95 + * FileContainer or ChunkContainer, client can implement custom serialization by implementing the interface
1.96 + * MXmlEngDataSerializer and specify the pointer in iDataSerializer member of aSaveOptions parameter. If no
1.97 + * custom serialization is specified, the binary data container nodes are serialized like text nodes.
1.98 + *
1.99 + * @since S60 v3.2
1.100 + * @param aFileName A file name (with path)
1.101 + * @param aRoot Root node to be serialized
1.102 + * @param aSaveOptions Options that control how serialization is performed
1.103 + * @return Number of byte written
1.104 + * @leave KErrNoMemory, KErrGeneral, KXmlEngErrWrongEncoding, KErrDiskFull.
1.105 + */
1.106 + IMPORT_C TInt SaveL( const TDesC& aFileName,
1.107 + TXmlEngNode aRoot = TXmlEngNode(),
1.108 + const TXmlEngSerializationOptions& aSaveOptions = TXmlEngSerializationOptions() ) const;
1.109 +
1.110 + /**
1.111 + * Serializes document tree into a file. For nodes containing binary data in the form of BinaryDataContainer,
1.112 + * FileContainer or ChunkContainer, client can implement custom serialization by implementing the interface
1.113 + * MXmlEngDataSerializer and specify the pointer in iDataSerializer member of aSaveOptions parameter. If no
1.114 + * custom serialization is specified, the binary data container nodes are serialized like text nodes.
1.115 + *
1.116 + * @since S60 v3.2
1.117 + * @param aRFs File Server session
1.118 + * @param aFileName A file name (with path)
1.119 + * @param aRoot Root node to be serialized
1.120 + * @param aSaveOptions Options that control how serialization is performed
1.121 + * @return Number of byte written
1.122 + * @leave KErrNoMemory, KErrGeneral, KXmlEngErrWrongEncoding, KErrDiskFull.
1.123 + */
1.124 + IMPORT_C TInt SaveL( RFs& aRFs,
1.125 + const TDesC& aFileName,
1.126 + TXmlEngNode aRoot = TXmlEngNode(),
1.127 + const TXmlEngSerializationOptions& aSaveOptions = TXmlEngSerializationOptions() ) const;
1.128 +
1.129 + /**
1.130 + * Serializes a document tree into provided output stream, which supports progressive writing of data.
1.131 + * For nodes containing binary data in the form of BinaryDataContainer, FileContainer or ChunkContainer,
1.132 + * client can implement custom serialization by implementing the interface MXmlEngDataSerializer and specify
1.133 + * the pointer in iDataSerializer member of aSaveOptions parameter. If no custom serialization is specified,
1.134 + * the binary data container nodes are serialized like text nodes.
1.135 + *
1.136 + * @since S60 v3.1
1.137 + * @param aStream An output stream to write serialized DOM tree
1.138 + * @param aRoot Root node to be serialized
1.139 + * @param aSaveOptions Options that control how serialization is performed
1.140 + * @return Number of byte written
1.141 + * @leave KXmlEngErrWrongUseOfAPI or one of general codes (e.g.KErrNoMemory)
1.142 + * @see MXmlEngOutputStream
1.143 + */
1.144 + IMPORT_C TInt SaveL( MXmlEngOutputStream& aStream,
1.145 + TXmlEngNode aRoot = TXmlEngNode(),
1.146 + const TXmlEngSerializationOptions& aSaveOptions = TXmlEngSerializationOptions() ) const;
1.147 +
1.148 + /**
1.149 + * Saves document tree into memory buffer
1.150 + *
1.151 + * @since S60 v3.1
1.152 + * @param aBuffer Resulting buffer
1.153 + * @param aRoot A "root" of the subtree to serialize
1.154 + * @param aSaveOptions Various options to be effective during serialization
1.155 + * @return Number of bytes in updated buffer
1.156 + * @leave KErrNoMemory, KErrGeneral, KXmlEngErrWrongEncoding.
1.157 + *
1.158 + * @note Result returned via aBuffer argument owns the memory buffer; it is up to
1.159 + * method caller to free it like in this sample:
1.160 + *
1.161 + * @see TXmlEngSerializationOptions
1.162 + */
1.163 + IMPORT_C TInt SaveL(RBuf8& aBuffer,
1.164 + TXmlEngNode aRoot = TXmlEngNode(),
1.165 + const TXmlEngSerializationOptions& aSaveOptions = TXmlEngSerializationOptions()) const;
1.166 +
1.167 + /**
1.168 + * Creates complete copy of the document
1.169 + *
1.170 + * @since S60 v3.1
1.171 + * @return Complete copy of the document tree
1.172 + */
1.173 + IMPORT_C RXmlEngDocument CloneDocumentL() const;
1.174 +
1.175 + /**
1.176 + * Creates new element from specific namespace to be a root of the document tree.
1.177 + * Any existing document element of the document is destroyed
1.178 + *
1.179 + * @since S60 v3.1
1.180 + * @param aName Element name
1.181 + * @param aNamespaceUri Element namespace URI
1.182 + * @param aPrefix Element namemespace prefix
1.183 + * @return A new root element
1.184 + */
1.185 + IMPORT_C TXmlEngElement CreateDocumentElementL(const TDesC8& aName,
1.186 + const TDesC8& aNamespaceUri = KNullDesC8,
1.187 + const TDesC8& aPrefix = KNullDesC8);
1.188 +
1.189 + /**
1.190 + * Replaces (and destroys) document element with another one
1.191 + * New document element is added as the last child to the document node
1.192 + *
1.193 + * @since S60 v3.1
1.194 + * @param aNewDocElement New document tree
1.195 + *
1.196 + * @note Use TXmlEngElement::ReconcileNamespacesL() on the new document element
1.197 + * if it or its descendants can contain references to namespace declarations
1.198 + * out of the element
1.199 + * @see TXmlEngElement::ReconcileNamespacesL()
1.200 + */
1.201 + IMPORT_C void SetDocumentElement(TXmlEngElement aNewDocElement);
1.202 +
1.203 + /**
1.204 + * Get document encoding
1.205 + *
1.206 + * @since S60 v3.1
1.207 + * @return Encoding of the source XML data.
1.208 + */
1.209 + IMPORT_C TPtrC8 XmlEncoding() const;
1.210 +
1.211 + /**
1.212 + * Get xml version
1.213 + *
1.214 + * @since S60 v3.1
1.215 + * @return Version number of XML taken from XML declaration
1.216 + */
1.217 + IMPORT_C TPtrC8 XmlVersion() const;
1.218 +
1.219 + /**
1.220 + * Retrieves base URI (if defined) of the document or NULL
1.221 + *
1.222 + * @since S60 v3.1
1.223 + * @return Document URI
1.224 + */
1.225 + IMPORT_C TPtrC8 DocumentUri() const;
1.226 +
1.227 + /**
1.228 + * Check if document is standalone
1.229 + *
1.230 + * @since S60 v3.1
1.231 + * @return Whether standalone="true" was specified in XML declaration in the source XML file.
1.232 + */
1.233 + IMPORT_C TBool IsStandalone() const;
1.234 +
1.235 + /**
1.236 + * Sets XML version number to be shown in XML declaration when document is serialized.
1.237 + *
1.238 + * @since S60 v3.1
1.239 + * @param aVersion New version
1.240 + */
1.241 + IMPORT_C void SetXmlVersionL(const TDesC8& aVersion);
1.242 +
1.243 + /**
1.244 + * Sets location of the document.
1.245 + * Document's URI is used as top-level base URI definition.
1.246 + *
1.247 + * @since S60 v3.1
1.248 + * @param aUri New document URI
1.249 + */
1.250 + IMPORT_C void SetDocumentUriL(const TDesC8& aUri);
1.251 +
1.252 + /**
1.253 + * Sets 'standalone' attribute of XML declaration for a document
1.254 + *
1.255 + * @since S60 v3.1
1.256 + * @param aStandalone Is document standalone
1.257 + */
1.258 + IMPORT_C void SetStandalone(TBool aStandalone);
1.259 +
1.260 + /**
1.261 + * Get dom implementation.
1.262 + *
1.263 + * @since S60 v3.1
1.264 + * @return Object that represents current DOM implementation
1.265 + *
1.266 + * @note There is no practical use of implementation object in this version
1.267 + * of API other than for creating new RXmlEngDocument instances, but
1.268 + * it will change in the future, when an implementation object
1.269 + * is used for changing configuration settings at run-time.
1.270 + */
1.271 + IMPORT_C RXmlEngDOMImplementation Implementation() const;
1.272 +
1.273 + /**
1.274 + * Get document element
1.275 + *
1.276 + * @since S60 v3.1
1.277 + * @return A document element - the top-most element in the document tree
1.278 + */
1.279 + IMPORT_C TXmlEngElement DocumentElement() const;
1.280 +
1.281 + /**
1.282 + * Sets "document" property on the node and all its descendants to be this RXmlEngDocument node
1.283 + *
1.284 + * @since S60 v3.1
1.285 + * @param aSource Node that should be added.
1.286 + * @return Adopted node
1.287 + */
1.288 + IMPORT_C TXmlEngNode AdoptNodeL(TXmlEngNode aSource);
1.289 +
1.290 + /**
1.291 + * Creates new attribute,
1.292 + *
1.293 + * @since S60 v3.1
1.294 + * @param aName Name of the atribute; no prefix allowed
1.295 + * @param aValue Value of the attribute (optional)
1.296 + * @return Handler to the newly created attribute
1.297 + *
1.298 + * @note
1.299 + * aValue should represent a correct value of an attribute if it is put as is into XML file
1.300 + * (with all characters correctly escaped with entity references when XML spec requires)
1.301 + *
1.302 + * TXmlEngElement class provides a rich set of attribute creation methods, which not
1.303 + * just create attribute but also link it into element.
1.304 + *
1.305 + * There is no way to create attributes with namespace (despite the DOM spec);
1.306 + * you have to use one of the TXmlEngElement::AddNewAttributeL(..) methods instead
1.307 + *
1.308 + * Returned handler is the only reference to the allocated memory
1.309 + * until you have attached the attribute to some element node
1.310 + */
1.311 + IMPORT_C TXmlEngAttr CreateAttributeL(const TDesC8& aName,
1.312 + const TDesC8& aValue = KNullDesC8);
1.313 +
1.314 + /**
1.315 + * Creates new text node and copies the content string into it.
1.316 + *
1.317 + * @since S60 v3.1
1.318 + * @param aCharacters Text node content
1.319 + * @return Created node
1.320 + */
1.321 + IMPORT_C TXmlEngTextNode CreateTextNodeL(const TDesC8& aCharacters = KNullDesC8);
1.322 +
1.323 + /**
1.324 + * Creates new binary container and copies the content string into it.
1.325 + * Pointer to the container is stored in the document's
1.326 + * data container list that can be fetched using GetDataContainerList().
1.327 + * @see GetDataContainerList( RArray<TXmlEngDataContainer>& aList )
1.328 + *
1.329 + * @since S60 v3.2
1.330 + * @param aCid Content identifier
1.331 + * @param aData Binary octets
1.332 + * @return Created node
1.333 + */
1.334 + IMPORT_C TXmlEngBinaryContainer CreateBinaryContainerL( const TDesC8& aCid,
1.335 + const TDesC8& aData );
1.336 +
1.337 + /**
1.338 + * Creates new chunk container that stores reference to
1.339 + * memory chunk.
1.340 + * Pointer to the container is stored in the document's
1.341 + * data container list that can be fetched using GetDataContainerList().
1.342 + * @see GetDataContainerList( RArray<TXmlEngDataContainer>& aList )
1.343 + *
1.344 + * @since S60 v3.2
1.345 + * @param aCid Content identifier
1.346 + * @param aChunk RChunk reference
1.347 + * @param aChunkOffset Offset to the binary data in aChunk
1.348 + * @param aDataSize Size of binary data in aChunk
1.349 + * @return Created node
1.350 + */
1.351 + IMPORT_C TXmlEngChunkContainer CreateChunkContainerL( const TDesC8& aCid,
1.352 + const RChunk& aChunk,
1.353 + const TInt aChunkOffset,
1.354 + const TInt aDataSize );
1.355 +
1.356 + /**
1.357 + * Creates new file container that stores reference to
1.358 + * file in file system.
1.359 + * Pointer to the container is stored in the document's
1.360 + * data container list that can be fetched using GetDataContainerList().
1.361 + * @see GetDataContainerList( RArray<TXmlEngDataContainer>& aList )
1.362 + *
1.363 + * @since S60 v3.2
1.364 + * @param aCid Content identifier
1.365 + * @param aFile RFile reference
1.366 + * @return Created node
1.367 + */
1.368 + IMPORT_C TXmlEngFileContainer CreateFileContainerL( const TDesC8& aCid,
1.369 + const RFile& aFile );
1.370 +
1.371 + /**
1.372 + * Creates new element node that belongs to specific namespace.
1.373 + * A namespace declaration node is created on the element.
1.374 + *
1.375 + * @since S60 v3.1
1.376 + * @param aNamespaceUri Namespace of new element
1.377 + * @param aPrefix Prefix to use for namespace binding and QName of the element
1.378 + * @param aLocalName Local name of the element
1.379 + * @return Created node
1.380 + * @note If null namespace uri is provided element will be created without namespace.
1.381 + */
1.382 + IMPORT_C TXmlEngElement CreateElementL(const TDesC8& aLocalName,
1.383 + const TDesC8& aNamespaceUri = KNullDesC8,
1.384 + const TDesC8& aPrefix = KNullDesC8);
1.385 +
1.386 + /**
1.387 + * Creates new comment node and copies the content string into it.
1.388 + *
1.389 + * @since S60 v3.1
1.390 + * @param aText New comment
1.391 + * @return Created node
1.392 + */
1.393 + IMPORT_C TXmlEngComment CreateCommentL(const TDesC8& aText = KNullDesC8);
1.394 +
1.395 + /**
1.396 + * Creates new CDATA section node and copies the content into it.
1.397 + *
1.398 + * @since S60 v3.1
1.399 + * @param aContents CDATASection content
1.400 + * @return Created node
1.401 + */
1.402 + IMPORT_C TXmlEngCDATASection CreateCDATASectionL(const TDesC8& aContents = KNullDesC8);
1.403 +
1.404 + /**
1.405 + * Creates new entity reference node for aEntityName entity
1.406 + *
1.407 + * @since S60 v3.1
1.408 + * @param aEntityRef is a string in one of the forms:
1.409 + * - <i>name</i>
1.410 + * - <b>&</b><i>name</i>
1.411 + * - <b>&</b><i>name</i><b>;</b>
1.412 + * where <i>name</i> is the name of the entity
1.413 + * @return Created node
1.414 + *
1.415 + * @note < , > , ' , " and other <b>predefined</b> entity references
1.416 + * should not be created with this method. These entity refs are rather
1.417 + * "character references" and encoded/decoded automatically.
1.418 + */
1.419 + IMPORT_C TXmlEngEntityReference CreateEntityReferenceL(const TDesC8& aEntityRef);
1.420 +
1.421 + /**
1.422 + * Creates new processing instruction node and set its "target" and "data" values
1.423 + *
1.424 + * @since S60 v3.1
1.425 + * @param aTarget Target
1.426 + * @param aData Data
1.427 + * @return Created node
1.428 + */
1.429 + IMPORT_C TXmlEngProcessingInstruction CreateProcessingInstructionL(const TDesC8& aTarget,
1.430 + const TDesC8& aData = KNullDesC8);
1.431 +
1.432 + /**
1.433 + * Registers specified attribute as xml:id.
1.434 + * First parametr allows user, to specify sub-tree, not to search whole document.
1.435 + * To search whole tree see @see RegisterXmlId(const TDesC8,const TDesC8)
1.436 + *
1.437 + * @since S60 v3.2
1.438 + * @param aStartElement Root of tree to search (should be part of the document)
1.439 + * @param aLocalName Name of attribute
1.440 + * @param aNamespaceUri Namespace of new element (default empty)
1.441 + */
1.442 + IMPORT_C void RegisterXmlIdL(TXmlEngElement aStartElement,
1.443 + const TDesC8& aLocalName,
1.444 + const TDesC8& aNamespaceUri = KNullDesC8);
1.445 +
1.446 + /**
1.447 + * Registers specified attribute as xml:id.
1.448 + * Not to search whole tree see @see RegisterXmlId(TXmlEngElement,const TDesC8,const TDesC8)
1.449 + *
1.450 + * @since S60 v3.2
1.451 + * @param aLocalName Name of attribute
1.452 + * @param aNamespaceUri Namespace of new element (default empty)
1.453 + */
1.454 + IMPORT_C void RegisterXmlIdL(const TDesC8& aLocalName,
1.455 + const TDesC8& aNamespaceUri = KNullDesC8);
1.456 +
1.457 + /**
1.458 + * Looks for element with specified value of xml:id
1.459 + *
1.460 + * @since S60 v3.2
1.461 + * @param aValue Name of attribute
1.462 + * @return found element or null-element.
1.463 + */
1.464 + IMPORT_C TXmlEngElement FindElementByXmlIdL(const TDesC8& aValue ) const;
1.465 +
1.466 + /**
1.467 + * Retrieves an array of data containers owned by this document.
1.468 + *
1.469 + * @note The document ceases to be the owner of data container when data container
1.470 + * (or one of its predecessors) is removed from the document or data container
1.471 + * (or one of its predecessors) becomes a part of another document.
1.472 + * Unlinking data container (or one of its predecessors) doesn't remove
1.473 + * ownership of data container from the this document so the list might
1.474 + * contain containers that are not linked to this document anymore.
1.475 + * @since S60 v3.2
1.476 + * @param aList Array of data containers
1.477 + */
1.478 + IMPORT_C void GetDataContainerList( RArray<TXmlEngDataContainer>& aList );
1.479 +
1.480 +protected:
1.481 + friend class RXmlEngDOMParser;
1.482 + friend class TXmlEngNode;
1.483 + friend class TXmlEngAttr;
1.484 + friend class TXmlEngElement;
1.485 + friend class RXmlEngDOMImplementation;
1.486 +
1.487 +protected:
1.488 + /**
1.489 + * Constructor
1.490 + *
1.491 + * @since S60 v3.1
1.492 + * @param aInternal Document pointer
1.493 + */
1.494 + inline RXmlEngDocument(void* aInternal);
1.495 +
1.496 + /**
1.497 + * DISABLED for document; CloneDocumentL() must be used
1.498 + *
1.499 + * @since S60 v3.1
1.500 + */
1.501 + inline TXmlEngNode CopyL() const;
1.502 +
1.503 + /**
1.504 + * DISABLED for document; Destroy() must be used
1.505 + *
1.506 + * @since S60 v3.1
1.507 + */
1.508 + inline void Remove();
1.509 +
1.510 + /**
1.511 + * DISABLED for document; Destroy() must be used
1.512 + *
1.513 + * @since S60 v3.1
1.514 + */
1.515 + inline void ReplaceWith(TXmlEngNode aNode);
1.516 +private:
1.517 + /**
1.518 + * Main implementation of SaveL() functions that puts together all common code
1.519 + * and serializes to buffer or output stream.
1.520 + *
1.521 + * @since S60 v3.2
1.522 + * @param aNode Root node to be serialized
1.523 + * @param aBuffer buffer with serialized data.
1.524 + * @param aOutputStream stream that should be used during serialization
1.525 + * @param aSaveOptions Options that control how serialization is performed
1.526 + * @return Number of bytes written
1.527 + * @leave KErrNoMemory, KErrGeneral, KXmlEngErrWrongEncoding, KErrDiskFull.
1.528 + */
1.529 + TInt SaveNodeL( TXmlEngNode aNode,
1.530 + RBuf8& aBuffer,
1.531 + MXmlEngOutputStream* aOutputStream = NULL,
1.532 + TXmlEngSerializationOptions aOpt = TXmlEngSerializationOptions()) const;
1.533 +
1.534 + /**
1.535 + * "Secondary" constructor that should be called on every newly created document node.
1.536 + * Initializes container for nodes owned by the document.
1.537 + *
1.538 + * The need for such secondary constructor is in the fact that underlying libxml2
1.539 + * library knows nothing about ownership of unlinked nodes -- this feature is
1.540 + * implemented in C++ DOM wrapper.
1.541 + *
1.542 + * @since S60 v3.1
1.543 + */
1.544 + void InitOwnedNodeListL();
1.545 +
1.546 + /**
1.547 + * Adds aNode to the list of owned nodes - the nodes that are not linked yet into a
1.548 + * document tree, but still destroyed with the document that owns them.
1.549 + *
1.550 + * @since S60 v3.1
1.551 + * @param aNode Node that should be added to document
1.552 + *
1.553 + * In case of OOM (during growing node list container) the argument node is freed with
1.554 + * xmlFreeNode()
1.555 + */
1.556 + void TakeOwnership(TXmlEngNode aNode);
1.557 +
1.558 + /**
1.559 + * Remove aNode from the list of owned nodes.
1.560 + *
1.561 + * @since S60 v3.1
1.562 + * @param aNode Node that should be removed from document
1.563 + */
1.564 + void RemoveOwnership(TXmlEngNode aNode);
1.565 +
1.566 +protected:
1.567 + /** Pointer to DOM implementation object */
1.568 + RXmlEngDOMImplementation* iImpl;
1.569 +
1.570 +};// class RXmlEngDocument
1.571 +
1.572 +
1.573 +
1.574 +#include "xmlengdocument.inl"
1.575 +
1.576 +#endif /* XMLENGINE_DOCUMENT_H_INCLUDED */