View Full Version : [C++, XML] Lettura dati XML da internet: come fare?
Salve ragazzi.
Devo scrivere un programmino c++ che mi legga dei dati da una pagina XML su internet e che me li salvi in un altro file.
Programmo su linux. La parte problematica è quella di lettura: so che devo usare un parser per fargli leggere il documento xml, ma per dire al mio programma che la pagina che deve aprirmi si trova su internet come faccio? Devo usare altri accorgimenti?
Il parser è quello che mi permette far leggere al mio programma il contenuto dell'xml? In materia di parser non sono preparato.
Grazie mille!!
kernel::panic
12-03-2008, 12:35
In C++ ho sempre usato TinyXML, va molto bene ed è facile ed immediato da usare: http://www.grinninglizard.com/tinyxml/
Purtroppo non ha una funzione per agganciarsi ad un file su web, quindi lo devi scaricare in locale (ad esempio su /tmp/).
Ciao :)
tomminno
12-03-2008, 13:17
Salve ragazzi.
Devo scrivere un programmino c++ che mi legga dei dati da una pagina XML su internet e che me li salvi in un altro file.
Programmo su linux. La parte problematica è quella di lettura: so che devo usare un parser per fargli leggere il documento xml, ma per dire al mio programma che la pagina che deve aprirmi si trova su internet come faccio? Devo usare altri accorgimenti?
Il parser è quello che mi permette far leggere al mio programma il contenuto dell'xml? In materia di parser non sono preparato.
Grazie mille!!
Per scaricare il file ti serve una libreria tipo CURL. Per cui con poche righe di codice puoi scaricare un file (sempre che tu non debba prima autenticarti sul sito)
int CurlCallback(char *data, size_t size, size_t nmemb, void* customData)
{
ofstream file("file.xml",ios::app);
if(file.is_open())
{
file << data;
file.close();
}
return size * nmemb;
}
int main()
{
CURL * curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "indirizzo_file_XML");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlCallback);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK)
std::cout << "Errore nel download" << std::endl;
return 0;
}
Per fare il parse di un XML hai solo l'imbarazzo della scelta: Expat, libXML2, Xerces...
mmm.. ottimo!!
Se invece avessi bisogno di autenticarmi?
tomminno
12-03-2008, 14:06
mmm.. ottimo!!
Se invece avessi bisogno di autenticarmi?
In questo caso le cose si fanno un pò più complicate perchè bisogna gestire la comunicazione HTTP con il server (esattamente come fa un browser).
Dovrai andare ad analizzare l'header HTTP di risposta e seguire le direttive del server: tipo di autenticazione richiesta, tenere traccia di eventuali cookie...
Con la CURL l'eventuale gestione dell'https è trasparente basta ricordarsi di specificate "https://" prima dell'url.
Si tratta sempre di operare con CURL in caso di autenticazione, no?
tomminno
13-03-2008, 07:32
Si tratta sempre di operare con CURL in caso di autenticazione, no?
Si ma devi conoscere l'autenticazione richiesta dal server.
In ogni caso si tratta di realizzare un browser minimale.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.