-
programma lettura e ricerca da file xml
Ciao a tutti!!! Mi sono appena iscritta e vorrei chiedervi aiuto per un progetto che devo fare…il progetto consiste nel realizzare un programma in c che deve prendere da linea di comando l’indirizzo di 1 o + file xml di notizie e prelevare da essi alcune informazioni (titolo, descrizione, ecc) che andranno mostrate creando una pagina html.
Inoltre, devono poter essere fatte ricerche di particolari notizie inserendo una o più parole come parametri di ricerca all’interno di titolo o descrizione del file xml. La ricerca può avvenire con operatore di congiunzione (AND) e con operatore di disgiunzione (OR). E la notizia (o le notizie) ritrovate devono essere visualizzate a monitor.
Ad esempio:
>Parola da cercare: CALCIO AND PIERO
>
>Categoria: Sport
>Data: 25/05/2040
>Titolo: Del Piero diventa nonno
>Descrizione: La juventus vince il suo 45 campionato di calcio con la prodezza del
nipote di Del Piero.
Quali algoritmi e strutture dati usereste voi per realizzare questo???Grazie!!!!!!!!!
-
Member
la scelta del c e di xml è obbligatoria?
-
-
Member
in tal caso io farei così...
mi farei un parser XML che ricerchi le stringhe all'interno del documento XML, ogni volta che trovi una corrispondenza metti l'ID dell'articolo in un array che ti sei creata prima e infine puoi crearti la pagina dinamicamente leggendo gli array e tirando su con XPATH i campi che ti servono, o addirittura se vuoi fare le cose più fini crei un foglio di stile XSL che interroghi l'XML in base agli ID trovati.
-
e se non potessi usare xpath??il fatto è che devo implementare il tutto io....
-
Member
Allora devi fare un altro giro con il parser e fargli tirar fuori quello che ti serve.
-
ok....però come posso realizzare il parser in modo efficiente????che algoritmo posso usare per ricercare nel file???boyer-moore può essere efficiente???e che strutture dati di supporto posso usare?????
-
Member
che complessità ti viene richiesta?
Ultima modifica di Zeus79; 20-01-2006 alle 11.33.29
-
si, è una cosa per l'uni......
non ho vincoli specifici sulla complessità....però so che al prof piace molto boyer-moore......
tu come procederesti invece???
-
Member
sai, io l'università l'ho finita da un paio d'anni e l'efficienza computazionale ha lasciato posto all'efficienza economico-temporale (in poche parole il miglior rapporto tra tempi di sviluppo e costi di sviluppo).
Se il tuo prof è un gran sostenitore di quell'algoritmo usa quello, sai come sono i prof quardano solo il bello e non il pratico. Attenta però alla complessità, cioè che se il boyre-moore mantiente O(mn) in ricerca (almeno cosi mi pare) devi evitare di cadere in complessità superiori nelle altre fasi di parsing (evitando quindi di fare più di una passata). Questo lo puoi fare studiandoti una struttura dati adeguata che potrebbe essere un array n*2 (matrice quindi) dove memorizzare l'id dell'articolo e un puntatore all'articolo stesso. Spero di essere stato chiaro, fammi sapere
-
Ciao a tutti... sono un nuovo iscritto.... e già mi girano i balls. Ho mandato una rispsota rapida, e mi dice "discussione non valida"... vabbè. Comunque ho lo stesso identico problema di puffetta. Non so come mai penso che abbiamo il prof in comune ^_^.
Andiamo avanti. Spero di esserti d'aiuto, quindi bando alle panze... alle zanze... alle ciance e andiamo.
Per quanto riguarda il parser, mi trovo in disaccordo con Zeus. non è necessario. Le notizie sono (come ovvio) in formato RSS 2.0. il che significa che sono racchiuse tra i tag <item> e </item>. Allora io ho fatto così:
1- arrivo a <item>
2- da qui inizio a bufferizzare la notizia
3- arrivato a </item> mi fermo
4- estraggo dal buffer i dati e li metto in una struttura del tipo
struct notizia{
char titolo[100];
char descr[1000];
.
.
.
}
Da qui in poi è una passeggiata perchè avrai a che fare solo con liste e vettori di caratteri. Cioè: ogni volta che acquisisci una notizia la sbatti in una struttura e la accodi ad una lista di strutture notizia. A questo punto dovrai solo trovare delle sottostringhe dentro a vettori di caratteri che puoi farlo facilmente con strstr(needle, stack) che ti restituisce un puntatore alla prima occorrenza di needle in stack. Se non la trova, restituisce NULL. Siccome non ci interessa sapere dove si trova la parola cercata (needle e stack sono due stringhe quindi char[]) basta che controlliamo che il ritorno di strstr() non sia NULL. In tal caso vuol dire che contiene la parola che cerchiamo.
Per la traduzione in HTML basta una semplice
fprintf(out,"<H1 class=/"titolo/">%s"<//H1>",notizia-corrente->titolo);
Lo stesso per le altre parti della notizia. out è un FILE *out. Uno stream qualsiasi cioè.
-
che cafone, non ho nemmeno salutato....
Spero di essere stato d'aiuto . CIAUZ!
-
Altra piccola tip sulla wget
Riciao. Ho dato una lettura al man della wget che dobbiamo usare per gettare i file xml. Se fai così:
wget -i sorgenti.txt -O in.xml (-O maiuscola)
dove sorgenti.txt è una lista di url (uno per riga) in formato ascii dei file da scaricare, la wget appende il contenuto di ogni file al file in.xml
Così ti trovi tutte le notizie in un solo file. E risolvi il prblema di scaricare tutti i file. Spero che anche questa tip possa servire.... CIAUUUUUUUZ
PadreMalvi wrote here ( http://blog.mrwebmaster.it/claudio1983/ )
-
Member
Ma così facendo il tuo algoritmo non è quadratico?
-
Lineare
Quadratico in che fase? Acquisizione delle notizie, ricerca nel testo o produzione del file di out in html?
Permessi di Scrittura
- Tu non puoi inviare nuove discussioni
- Tu non puoi inviare risposte
- Tu non puoi inviare allegati
- Tu non puoi modificare i tuoi messaggi
-
Regole del Forum
Segnalibri