diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/xmlexample_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/xmlexample_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,372 +0,0 @@ - -
-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 -