diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/xmlexample_8cpp_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/xmlexample_8cpp_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,376 @@ + + + + +TB9.2 Example Applications: examples/SysLibs/XmlExample/xmlexample.cpp Source File + + + + + +

examples/SysLibs/XmlExample/xmlexample.cpp

Go to the documentation of this file.
00001 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+00002 // All rights reserved.
+00003 // This component and the accompanying materials are made available
+00004 // under the terms of "Eclipse Public License v1.0"
+00005 // which accompanies this distribution, and is available
+00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
+00007 //
+00008 // Initial Contributors:
+00009 // Nokia Corporation - initial contribution.
+00010 //
+00011 // Contributors:
+00012 //
+00013 // Description:
+00014 // This example program demonstrates the use of XML Framework APIs. 
+00015 // The code implements all the functions of MContentHandler class.
+00016 // The example parses the XML file and WBXML file present in the specified path. To know how to 
+00017 // write an XML file you can refer to this URL http://www.w3schools.com/xml/.
+00018 //
+00019 
+00020 
+00021 
+00025 #include "xmlexample.h"
+00026 #include <xml/documentparameters.h>
+00027 #include <xml/parserfeature.h>
+00028 #include <xml/matchdata.h>
+00029 #include <e32cons.h>
+00030 
+00031 using namespace Xml;
+00032 
+00033 _LIT(KTitle, "XML example");
+00034 _LIT(KStartKey, "\nThe example parses the given XML and WBXML files. Press any key to start\n");
+00035 _LIT(KPressAKey,"\nPress any key to continue \n");
+00036 _LIT(KExit,"\n Press any key to exit the application \n");
+00037 _LIT(KParsingXml,"\nParsing the XML file");
+00038 _LIT(KParsingWbXml,"\nParsing the WBXML file");
+00039 _LIT(KParsingMatch,"\nParsing the XML file using match data criteria");
+00040 _LIT(KError,"\n Could not open the XML file. Please check if the file exists.");
+00041 
+00042 _LIT(KOnStartDoc,"\n<!-- CXmlExample::OnStartDocumentL -->\n");
+00043 _LIT(KOnEndDoc,"\n<!-- CXmlExample::OnEndDocumentL -->\n");
+00044 _LIT(KOnContent,"<!-- CXmlExample::OnContentL -->");
+00045 _LIT(KOnProcInstrn,"\n<!-- CXmlExample::OnProcessingInstructionL -->\n");
+00046 _LIT(KOnError,"CXmlExample::OnError - ERROR: code=%d\n");
+00047 
+00048 _LIT(KVersion,"<?xml version=\"1.0\" encoding=\"%S\"?>\n");
+00049 _LIT(KStartElement,"\nStart of element: <%S>\n");
+00050 _LIT(KEndElement,"\nEnd of element: </%S>\n");
+00051 _LIT(KContent,"%S\n");
+00052 _LIT(KAttrib,"The attribute of element <%S>=\"%S\"");
+00053 _LIT(KProcInstrn,"<?%S %S?>\n");
+00054 _LIT(KOnSkipped, "Found skipped entity %S");
+00055 _LIT(KNameSpaceRep,"\nNamespace mapping reporting enabled\n ");
+00056 _LIT(KPrefixMap, "\nThe prefix is %S and URI is %S\n");
+00057 _LIT(KPrefixEnd, "End of prefix URI mapping %S\n");
+00058 
+00059 _LIT(KSimpleXmlFile,    "z:\\private\\E80000AE\\xmlexample.xml");
+00060 _LIT(KSimpleWbXmlFile,    "z:\\private\\E80000AE\\xmlexample.wbxml");
+00061 _LIT8(KXmlMimeType, "text/xml");
+00062 _LIT8(KWbxmlMimeType, "text/wbxml");
+00063 
+00068 CXmlExample* CXmlExample::NewL()
+00069         {
+00070         CXmlExample* self = new (ELeave) CXmlExample();
+00071         CleanupStack::PushL(self);
+00072         self->ConstructL();
+00073         CleanupStack::Pop();
+00074         return self;
+00075         }
+00076 
+00077 CXmlExample::CXmlExample()
+00078         :iError(KErrNone)
+00079         {
+00080         }
+00081 
+00082 void CXmlExample::ConstructL()
+00083         {
+00084         iConsole = Console::NewL(KTitle,TSize(KConsFullScreen,KConsFullScreen));
+00085         iConsole->Printf ( KStartKey);
+00086         iConsole->Getch ();
+00087         }
+00088 
+00092 CXmlExample::~CXmlExample()
+00093         {
+00094         iConsole->Printf(KExit);
+00095         iConsole->Getch();
+00096         delete iConsole;
+00097         }
+00098 
+00109 void CXmlExample::OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode)
+00110         {
+00111         User::LeaveIfError(aErrorCode);
+00112         iConsole->Printf(KOnStartDoc);
+00113 
+00114         const TDesC8& encoding8 = aDocParam.CharacterSetName().DesC();
+00115         HBufC* encoding16= Copy8To16LC(encoding8);
+00116 
+00117         iConsole->Printf(KVersion, encoding16);
+00118         CleanupStack::PopAndDestroy(encoding16);
+00119 
+00120         }
+00121         
+00130 void CXmlExample::OnEndDocumentL(TInt aErrorCode)
+00131         {
+00132         User::LeaveIfError(aErrorCode);
+00133         iConsole->Printf(KOnEndDoc);
+00134         User::After(700000); // 0.7 seconds
+00135         }
+00136 
+00148 void CXmlExample::OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode)
+00149         {
+00150         User::LeaveIfError(aErrorCode);
+00151 
+00152         const TDesC8& localName8 = aElement.LocalName().DesC();
+00153         
+00154         HBufC* localName16 = Copy8To16LC(localName8);
+00155         
+00156         iConsole->Printf(KStartElement,localName16);
+00157 
+00158         CleanupStack::PopAndDestroy();  // Delete localName16
+00159 
+00160         TInt nAttributes = aAttributes.Count();
+00161         for(TInt i=0; i<nAttributes; i++)
+00162                 {
+00163                 const RAttribute& attribute = aAttributes[i];
+00164                 const RTagInfo& nameInfo = attribute.Attribute();
+00165 
+00166                 const TDesC8& localName8 = nameInfo.LocalName().DesC();
+00167                 const TDesC8& value8 = attribute.Value().DesC();
+00168 
+00169                 HBufC* localName16 = Copy8To16LC(localName8);
+00170                 HBufC* value16 = Copy8To16LC(value8);
+00171 
+00172                 iConsole->Printf(KAttrib, localName16, value16);
+00173                 CleanupStack::PopAndDestroy(2,localName16);
+00174                 }
+00175         User::After(700000); // 0.7 sec
+00176 
+00177         }
+00178 
+00189 void CXmlExample::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode)
+00190         {
+00191         User::LeaveIfError(aErrorCode);
+00192         
+00193         const TDesC8& localName8 = aElement.LocalName().DesC();
+00194         HBufC* endBuf16 = Copy8To16LC(localName8);
+00195         
+00196         iConsole->Printf(KEndElement,endBuf16);
+00197         
+00198          CleanupStack::PopAndDestroy(endBuf16);
+00199         }
+00200 
+00205 HBufC* CXmlExample::Copy8To16LC(const TDesC8& aDes)
+00206         {
+00207         HBufC* buf16 = HBufC::NewLC(aDes.Length());
+00208         buf16->Des().Copy(aDes);
+00209         return buf16; 
+00210         }
+00211 
+00212 
+00228 void CXmlExample::OnContentL(const TDesC8& aData8, TInt aErrorCode)
+00229         {
+00230         User::LeaveIfError(aErrorCode);
+00231         iConsole->Printf(KOnContent);
+00232         
+00233         HBufC* data16 = Copy8To16LC(aData8);
+00234         
+00235         iConsole->Printf(KContent,data16);      
+00236         
+00237         CleanupStack::PopAndDestroy(data16);
+00238         
+00239         }
+00240 
+00252  void CXmlExample::OnProcessingInstructionL(const TDesC8& aTarget8, const TDesC8& aData8, TInt aErrorCode)
+00253         {
+00254         User::LeaveIfError(aErrorCode);
+00255         iConsole->Printf(KOnProcInstrn);
+00256 
+00257 
+00258         HBufC* target16 = Copy8To16LC(aTarget8);
+00259         HBufC* data16 = Copy8To16LC(aData8);
+00260 
+00261         iConsole->Printf(KProcInstrn,target16,data16);
+00262         CleanupStack::PopAndDestroy(2,target16);
+00263         User::After(700000); // 0.7 sec
+00264         }
+00265 
+00272 void CXmlExample::OnError(TInt aError)
+00273         {
+00274         iError = aError;
+00275         iConsole->Printf(KOnError,aError);
+00276         iConsole->Printf(KPressAKey);
+00277         iConsole->Getch();
+00278         }
+00279 
+00283 TAny* CXmlExample::GetExtendedInterface(const TInt32 /*aUid*/)
+00284         {
+00285         // do nothing.
+00286         return NULL;
+00287         }
+00288         
+00300 void CXmlExample::OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode)
+00301         {
+00302         User::LeaveIfError(aErrorCode);
+00303         const TDesC8& localPrefix8 = aPrefix.DesC();
+00304         HBufC* temp1 = Copy8To16LC(localPrefix8);
+00305         const TDesC8& localUri8 = aUri.DesC();
+00306         HBufC* temp2 = Copy8To16LC(localUri8);
+00307         
+00308         iConsole->Printf(KPrefixMap, temp1, temp2);
+00309         CleanupStack::PopAndDestroy(2, temp1);
+00310         
+00311         iConsole->Printf(KPressAKey);
+00312         iConsole->Getch();
+00313                 
+00314         }
+00315         
+00319 void CXmlExample::OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode)
+00320         {
+00321         User::LeaveIfError(aErrorCode);
+00322         const TDesC8& localPrefix8 = aPrefix.DesC();
+00323         HBufC* temp = Copy8To16LC(localPrefix8);
+00324         iConsole->Printf(KPrefixEnd, temp);
+00325         CleanupStack::PopAndDestroy(temp);
+00326         }
+00327 
+00331 void CXmlExample::OnIgnorableWhiteSpaceL(const TDesC8&, TInt)
+00332         {
+00333         
+00334         }
+00335 
+00347 void CXmlExample::OnSkippedEntityL(const RString& aName, TInt aErrorCode)
+00348         {
+00349         User::LeaveIfError(aErrorCode);
+00350         
+00351         const TDesC8& localName8 = aName.DesC();
+00352         HBufC* temp = Copy8To16LC(localName8);
+00353         
+00354         iConsole->Printf(KOnSkipped, temp);
+00355         CleanupStack::PopAndDestroy(temp);
+00356         User::After(700000); // 0.7 sec delay           
+00357         }
+00358 
+00362 void CXmlExample::ParseExampleDocumentsL()
+00363         {
+00364         RFs fs;
+00365         User::LeaveIfError(fs.Connect());
+00366         CleanupClosePushL(fs);
+00367 
+00368         RFile handle;
+00369         TInt err;
+00370         // Open an example XML file for parsing
+00371         TRAP(err,handle.Open(fs, KSimpleXmlFile, EFileShareReadersOnly));
+00372         if (err != KErrNone)
+00373                 {
+00374                 iConsole->Printf(KError);
+00375                 User::Leave(err);
+00376                 }
+00377         CleanupClosePushL(handle);
+00378 
+00379         // Open parser session for text/xml mime type
+00380         CParser* parser = CParser::NewLC(KXmlMimeType, *this);
+00381         
+00382         iConsole->Printf(KParsingXml);
+00383         iConsole->Printf(KPressAKey);
+00384         iConsole->Getch();
+00385         
+00386         err = parser->EnableFeature(EReportNamespaceMapping);
+00387          
+00388         if(err==KErrNone) 
+00389         {
+00390         iConsole->Printf(KNameSpaceRep);
+00391         } 
+00392 
+00393         // Starts parser session
+00394         ParseL(*parser, handle); // this will result in callbacks to handler
+00395         
+00396         // Closes the parser session.
+00397         CleanupStack::PopAndDestroy(parser);
+00398         CleanupStack::Pop(&handle);
+00399 
+00400         // Open an example WBXML file for parsing
+00401         TRAP(err,handle.Open(fs, KSimpleWbXmlFile, EFileShareReadersOnly));
+00402         if (err != KErrNone)
+00403                 {
+00404                 iConsole->Printf(KError);
+00405                 User::Leave(err);
+00406                 }
+00407         CleanupClosePushL(handle);
+00408 
+00409         parser = CParser::NewLC(KWbxmlMimeType, *this);
+00410         
+00411         iConsole->Printf(KParsingWbXml);
+00412         iConsole->Printf(KPressAKey);
+00413         iConsole->Getch();
+00414         
+00415         // Starts parser session and active scheduler.
+00416         ParseL(*parser, handle); // this will result in callbacks to handler
+00417 
+00418         CleanupStack::PopAndDestroy(parser);
+00419         CleanupStack::Pop(&handle);
+00420 
+00421         // Open an example XML file for parsing using a parser specified with 
+00422         // MatchData. In this case, the default Symbian platform parser is requested.
+00423         
+00424         TRAP(err,handle.Open(fs, KSimpleXmlFile, EFileShareReadersOnly));
+00425         if (err != KErrNone)
+00426                 {
+00427                 iConsole->Printf(KError);
+00428                 User::Leave(err);
+00429                 }       
+00430         CleanupClosePushL(handle);
+00431 
+00432         CMatchData *matchData = CMatchData::NewLC();
+00433         matchData->SetMimeTypeL(KXmlMimeType);
+00434         matchData->SetVariantL(_L8("Symbian"));
+00435         
+00436         iConsole->Printf(KParsingMatch);
+00437         iConsole->Printf(KPressAKey);
+00438         iConsole->Getch();
+00439         
+00440         parser = CParser::NewLC(*matchData, *this);
+00441         ParseL(*parser, handle);
+00442         
+00443         CleanupStack::PopAndDestroy(2,matchData);
+00444         CleanupStack::PopAndDestroy(&handle);
+00445         CleanupStack::PopAndDestroy(&fs);
+00446         
+00447         }
+00448 
+00449 LOCAL_C void MainL()
+00450         {
+00451         CXmlExample* app = CXmlExample::NewL();
+00452         CleanupStack::PushL(app);
+00453         
+00454         app->ParseExampleDocumentsL();
+00455         CleanupStack::PopAndDestroy(app);
+00456 
+00457         }
+00458 
+00459 GLDEF_C TInt E32Main()
+00460         {
+00461     __UHEAP_MARK;
+00462     CTrapCleanup* cleanup = CTrapCleanup::New();
+00463     if(cleanup == NULL)
+00464         {
+00465         return KErrNoMemory;
+00466         }
+00467     TRAPD(err, MainL());
+00468         if(err != KErrNone)
+00469                 {
+00470                 User::Panic(_L("Failed to complete"),err);
+00471                 }
+00472 
+00473     delete cleanup;
+00474     __UHEAP_MARKEND;
+00475     return KErrNone;
+00476         }
+00477 
+00478 
+00479 
+
+
Generated by  + +doxygen 1.6.2
+ +