STL stream XML parse-olása MSXML 6.0 segítségével

Mivel a Windows XP SP3 felett minden Windows verzió tartalmazza az MSXML 6.0-át, logikus lépés lehet, hogy használjuk XML alapú projektjeinkben. Ehhez viszonylag kevés dolgot is elegendő implementálni.

SAX2 betöltéshez a következő osztályokat kell implementálni:
- ISAXContentHandler - MSDN
- ISequentialStream - MSDN

Ha ezzel megvagyunk akkor a stream olvasása már igen egyszerű:


// ha a beolvasás sikeres, a visszatérési érték true, egyébként false
bool ParseStream( istream &is )
{
 // COM objectek használata
 if ( FAILED(CoInitialize(NULL)) )
  return false;

 // XML olvasó osztály készítése
 ISAXXMLReader * reader = 0;
 if ( FAILED( CoCreateInstance( __uuidof(SAXXMLReader60), NULL, CLSCTX_ALL, __uuidof(ISAXXMLReader),(void**) &reader ) ) )
 {
  CoUninitialize()
  return false;
 }

 // STL stream alapú osztály készítése
 ISequentialStream * my_stream = new vtkSequentialStream(is);
 // tartalom kezelő osztály készítése
 ISAXContentHandler * content_handler = new vtkContentHandler;

 // referencia számlálók 1-re állítása
 my_stream->AddRef();
 content_handler->AddRef();

 // tartalom kezelőosztály hozzáadása
 if ( FAILED( reader->putContentHandler( content_handler ) ) )
 {
  // ha nem sikerül, felszabadítás és kilépés
  my_stream->Release();
  content_handler->Release();
  reader->Release();
  return false;
 }

 // bemeneti változó beállítása
 VARIANT var;
 var.vt = VT_UNKNOWN;
 var.punkVal = my_stream;
 VARIANT_BOOL success = FALSE;

 // stream olvasása
 bool value = SUCCEEDED( reader->parse( var ) );

 // felszabadítás és kilépés
 my_stream->Release();
 content_handler->Release();
 reader->Release();
 return ( value && ( success != VARIANT_FALSE ) );
}

Hozzászólások

Alapvetően célom minél kevesebb "3rd party tool" használata. Jelenleg Windows-os programot írok és ezzel a módszerrel semmilyen külső könyvtárra nem szorulok rá, miközben az XML parser-en kívül gyakorlatilag szabványos kódot hegesztek. Ha ContentHandler osztályt ügyesen írod, akkor Linux alatt is jó lehetsz egy sima libxml2-vel.
--
http://www.naszta.hu

Persze, csak logot nem feltétlen böngészőben szokás nézni. Ott azért számít az, hogy grepelhető legyen és tsi.

Plain text erre alkalmasabb (és bár sokan kardoskodnak ellene, de szerintem bizonyos esetekben az SQL is megfelelő tud lenni, főleg, ha sokat kell benne keresni, szűrni ÉS rendezni, összesíteni.)

Amit te mondasz, arra normális ember külön alkalmazást/szkriptet/bármi random megjelenítőt ír.

----------------
Lvl86 Troll

Az egészben az a gyönyörű, hogy mindenféle plusz szutyok nélkül is lehet "grep"-elni...

...plain textben.

És mint ahogy szó volt róla: itt Windows és only-MS dolgok a preferáltak a feladatnál. Nem kell már megint mindenhova a nyomorék Pythont erőltetni.

----------------
Lvl86 Troll