+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

lettura XML con visual c++ 6.0

  1. #1
    margottina non è in linea Novello
    ciao a tutti...
    è la prima volta che scrivo qui..spero di non commettere errori...
    vi chiedo AIUTO... :
    ho un codice in c++ scritto da altri nel quale devo inserirmi per effettuare la lettura (solo la lettura) di un file XML.
    conoscete qualche libreria opensource che posso utilizzare???
    in particolare il mio file xml contiene i dati di record di un database: passando dei valori vorrei me ne fossero restituiti altri....
    grazie in anticipo....

  2. #2
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Ti segnalo qualche risorsa:
    • Lo xerces (Xerces-C++ XML Parser) è un parser/validator xml ben fatto e multipiattaforma. Come tutti i progetti di origine linux ha il fastidioso problema di richiedere diverse librerie aggiuntive (per lo più ridondanti sotto windows, visto che il sistema metterebbe già a disposizione determinate funzionalità). Per compilarlo ed usarlo in MSVC probabilmente dovrai "smanettare" un poco.
    • La libreria Chilkat (Visual C++ XML Example Source Code) comprende funzionalità di parsing xml. E'pienamente compatibile con MSVC 6,7 e 8 (6.0, .net 2003 e .net 2005). Il problema è che è una libreria piuttosto grande con numerose altre funzionalità. Per l'unico scopo di effettuare il parsing di file xml probabilmente è un oggetto un po'troppo pesante. In ogni caso può valere la pena dargli un'occhiata.
    • La Expat (The Expat XML Parser) è una libreria per il parsing xml che mi pare abbastanza ben fatta.
      E'completamente in C, ma su codeproject (CodeProject: C++ Wrappers for the Expat XML Parser. Free source code and programming help) trovi un wrapper C++ che incapsula in un insieme di classi, le funzioni della libreria.
    • CMarkup (CMarkup: fast simple C++ XML parser) è un altro parser xml minimale (sono un header e un sorgente) scritto in C++

    Cercando "xml parser source code" in rete, poi, trovi decine di altri progetti e spezzoni di codice.

    Ciaociao
    Ultima modifica di bottomap; 27-11-2008 13:32 
    ℹ️ Leggi di più su bottomap ...

  3. #3
    margottina non è in linea Novello
    grazie....
    avevo gia scaricato expat.. ma scusa ma mia ignoranza cos'è un wrapper???

  4. #4
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Niente di trascendentale... è qualcosa che avvolge (to wrap) qualcos'altro... in programmazione è un insieme di funzioni/classi che ne incapsulano altre. Una sorta di interfaccia di più alto livello verso le funzioni originali (di livello più basso).

    Nel nostro caso si tratta di una serie di classi che non fanno altro che utilizzare le funzioni della expat. L'utilità è quella di avere a disposizione degli oggetti (che magari chiamano più funzioni expat da un solo metodo) di più facile gestione.

    Nel mondo C++ sono frequenti i wrapper creati attorno a progetti C, in modo da trasportare le funzionalità esistenti in classi di più alto livello e da poter sfruttare appieno le potenzialità del linguaggio e della programmazione OO anche quando lo strato stottostante (expat) è un progetto strettamente C.

    Per farti un esempio, supponi che la expat (non la conosco) abbia una funzione per aprire il file xml (open_xml), una funzione per leggerne il contenuto in un buffer (read_xml) dato l'handle del file, ed una funzione per lavorare sul buffer ed ottenere una serie di stringhe C 0-terminated, alla maniera della strtok (next_xml_token).
    Un wrapper potrebbe fornire una classe (CXmlFile), con un metodo (open) che usa open_xml e gestisce internamente il puntatore al file, ed un metodo (parse) che utilizza read_xml e next_xml_token per riempire uno std::vector di elementi std::string, o un albero, o quant'altro ti può venire in mente. Potrebbe inoltre aggiungere metodi che lavorano su quanto ottenuto per effettuare funzioni di find (voglio verificare se un elemento è presente nel xml), controllo di correttezza degli elementi, ecc

    Allo sviluppatore basterà creare un oggetto CXmlFile ed usarne open e parse per avere a disposizione, ad esempio, l'albero del file... l'utilizzo della expat è nascosto (wrappato) dalla classe...

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  5. #5
    margottina non è in linea Novello
    grazie... sei molto chiaro nelle spiegazioni ma io ho comunque difficoltà... quello che ho scaricato da SourceForge.net: Expat XML Parser d expat è un progetto vero e proprio mentre io mi sarei aspettata una dll.
    è chiaro il concetto di wrapper ma non so come applicarlo ad un progetto... o probabilmente da questo dovrei estrapolare solo le funzioni che possono interessarmi???

  6. #6
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Nel pacchetto (scarica la versione win32) sono presenti:
    - Nella cartella bin le due dll (libexpat.dll e libexpatw.dll - la seconda serve per l'unicode), con i relativi .lib di raccordo (che vanno linkati al progetto), le versioni MT sono per applicativi multithread.
    - Nella cartella lib le due dll e le due lib
    - Nella cartella StaticLibs le versioni statiche (se non vuoi usare le dll - la dimensione del tuo programma aumenta, ma non devi redistribuire le dll)

    In source\libs hai invece tutta una serie di header (.h) che ti serviranno se vuoi usare le funzioni della libreria. Basta fare in modo che il compilatore veda questa cartella e quella delle lib (in genere nelle opzioni del compilatore è possibile specificare directory aggiuntive per gli include e le librerie).

    Detto questo, per usare expat dentro ad un tuo modulo devi:
    - #includere l'header appropriato (credo sia sufficiente <expat.h>, ad ogni modo guarda qualcuno degli esempi in Source\examples).
    - linkare con la lib appropriata. Nei compilatori msvc puoi indicare librerie aggiuntive direttamente nel tuo sorgente con la direttiva #pragma comment(lib,"nome libreria"), altrimenti dalle opzioni del progetto dovresti poterle comunque aggiungere.

    Se ottieni errori di compilazione il problema è negli include, se ottieni errori di linking il problema è nelle librerie. Ad ogni modo hai tutto quanto ti serve già a disposizione... non dovrebbe essere necessario ricompilare il progetto expat.

    Per il wrapper, oltre a quanto detto, dovrai aggiungere i file (generalmente .h e .cpp) al tuo progetto... saranno loro ad avere le #include <expat.h> (eventualmente dovrai linkare comunque il tuo progetto con le lib appropriate), da dentro ai tuoi moduli #includerai semplicemente "<nome_del_wrapper.h>" e ne userai le classi.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  7. #7
    margottina non è in linea Novello
    ciao. ho fatto come hai detto. ho creato un'applicazione win32 console appl. e ho inserito le dll e i file.h di expath. e fin qui tutto ok. poi ho incluso il file Expatlmpl.h (wrapper) e ho copiato in una classe.cpp l'esempio "getting started" riportato nel link che mi avevi segnalato CodeProject: C++ Wrappers for the Expat XML Parser. Free source code and programming help.
    nella cartella nove ci sono i *.h di expat ho aggiunto anche Expatlmpl.h, li ho aggiunti al progetto e ho incluso in classe.cpp #include "Expatlmpl.h"
    ma nonostante abbia incluso tutti i .h e le lib di expath mi da questo errore
    fatal error C1083: Cannot open include file: 'Expatlmpl.h': No such file or directory

    perchè ???
    scusami per il disturbo ...

  8. #8
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Figurati, nessun disturbo

    Il wrapper (h e cpp) mettilo direttamente nel progetto... non è una libreria a sé stante, è solo codice... aggiungi il cpp tra i source file ed il .h tra gli header.

    Non avevo comunque letto troppo a fondo l'articolo sul wrapper. Quello che ottieni utilizzandolo è una classe di base, da cui puoi derivare un tuo parser.. la classe di base sostanzialmente legge il file e sa se è corretto o no, ma per aggiungere qualche comportamento più specifico (se trovi questo tag fai questa cosa) devi derivarti una classe e gestire, come descritto nell'articolo, i metodi appropriati.

    Forse è qualcosa di un po'troppo raffinato... casomai per iniziare prova a vedere se riesci ad usare solo la libreria expat... hai già tutto il necessario e nella documentazione della libreria dovresti poter trovare esempi e indicazioni su come fare un parsing di base. Poi magari puoi decidere se andare avanti con la sola libreria o se è il caso di utilizzare il wrapper.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  9. #9
    margottina non è in linea Novello
    avevo sbagliato una cosa banalissima.. diciamo che ora compila ma non riesco a istanziare una classe come quella dell'esempio... diciamo che sto affogando... forse inutilmente...
    ma ho bisogno di usare un wrapper... mi servono funzioni in c++ mentre la libreria è in C .. vorresti dirmi che devo creare qualcosa da sola???

  10. #10
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Si... l'articolo suggerisce di derivare una classe dal wrapper (class CMyXML : public ExpatImpl) e dentro scriverci alcune funzioni... l'ExpatImpl (il wrapper in sé) non fa molto più che il parsing e il controllo di correttezza.

    In alternativa puoi accantonare il wrapper ed usare la libreria expat da sola (il codice resta comunque compatibile, anche se C, solo che invece che usare classi e metodi del wrapper, userai le funzioni che la libreria mette a disposizione).

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Conversione codice da visual basic a visual....
    Da Sn0rky nel forum Visual Basic .Net
    Risposte: 5
    Ultimo Post: 20-03-2014, 08:17
  2. Risposte: 1
    Ultimo Post: 29-05-2013, 09:30
  3. Visual basic 2010 - lettura dati database
    Da neriton nel forum Visual Basic .Net
    Risposte: 2
    Ultimo Post: 05-03-2013, 15:02
  4. Visual basic.net o visual studio?
    Da Ghostman nel forum Visual Basic .Net
    Risposte: 7
    Ultimo Post: 08-01-2008, 17:16
  5. Risposte: 4
    Ultimo Post: 03-04-2006, 23:59