Ciao a tutti!
Dovrei automatizzare un procedimento abbastanza noioso di trasformazione del testo (di un file html) compreso tra i vari tag, per una specie di newsletter.
Premetto che ho trovato tonnellate di guide per scansionare semplicemente l'alberatura dei vari nodi e sottonodi, ed estrapolarne i dati, tutt'al più modificare gli attributi dei vari tag,
ed inoltre qualche metodo che lavora sugli XML mi ha dato problemi sul parsing in quanto l'html che devo trasformare a volte non è well-formed.
Io devo praticamente analizzare e formattare TUTTO il testo "normale" compreso tra due tag:
es1:
es2:
codice:
<div>TESTO
<table>
<tr>una colonna
<td>una riga</td>
<td>due righe</td>
</tr>
</table>
</div>
dovrei analizzare nell'es1 solo TESTO, e nell'es2 "TESTO", "una colonna","una riga","due righe"
e all'occorrenza dovrei anche modificare questi testi, per esempio sostituire i caratteri speciali come '&" èà ecc.ecc.. ma devo farci anche altre 2-3 cose lunghe da spiegare, e già risolte con un paio di funzioncine sulle stringhe.
Visto che l'html può avere infiniti nodi children, dovrei scrivere un metodo ricorsivo o comunque ciclico che, per ogni nodo, controlla il suo testo e poi passa ai figli e tutti i "discendenti"
...
Io ho cominciato a prendere riga per riga di un file html, cercare "<" e se lo trovo cerco ">",
faccio una substring dall'indice del primo al secondo e ignoro cioò che c'è all'interno.
Il problema è che nel testo html potrebbero esserci <> (da cambiare con < >
, quindi non necessariamente tag html.
un altro problema nasce dal seguente caso
codice:
<td width="471" style="color:#1e86bd; font-family:Verdana,Arial,Helvetica,sans-serif;
font-size:12px; line-height:16px;">
visto che sto operando riga per riga, non trovando la chiusura tag la funzione che sto facendo potrebbe interpretare come testo normale ciò che invece non deve toccare.
Potrei ovviare mettendo un flag es.isTagEnded e controllare che al rigo successivo ci sia ">"
ma la cosa è un po elaborata e poco elegante...
Qualche libreria di cui ho letto permette di esplorare l'alberatura , di estrapolare tutto il testo normale, ma come modificarlo in modo dinamico non mi è sembrato di trovarne nessuno...
Poi ho un altro dubbio:
se pure trovassi qualche libreria ed avessi una alberatura come l'es2
partendo dal nodo più "alto" (div) dovrei modificare solo TESTO,poi scendendo in TABLE non trovo nulla e vado avanti con
<td>una riga</td> e processo "una riga"(es cambio in "1 riga")
vado avandi con
<td>due righe</td>e processo "due righe"(es cambio in "2 righe")
il dubbio è : non è che quando parte da <div> considera come testo anche tutti gli altri tag tipo <TABLE>???
Qualcuno mi riesce a consigliare qualche libreria valida per scansionare e modificare dinamicamente il testo contenuto dei nodi senza intaccare i tag?