2012-07-08 12 views
6

Ho bisogno di mappare elementi jsoup su offset di caratteri specifici nell'HTML di origine. In altre parole, se ho HTML che assomiglia a questo:Ottieni offset caratteri per elementi in jsoup

Hello <br/> World 

ho bisogno di sapere che "Ciao" inizia all'offset 0 e ha una lunghezza di 6 caratteri, <br/> inizia all'offset 6 e ha una lunghezza di 5 caratteri, ecc.

Non riesco a trovare un getter nell'elemento javadoc che restituisce questa informazione. Può essere recuperato?

+0

Hai trovato una soluzione a questo che non ha comportato la scrittura della tua grammatica? – elaRosca

+0

No. Sto ancora usando jflex. – ccleve

risposta

0

Non credo che Jsoup abbia questa funzionalità. Questa domanda sembra più vicina all'analisi lessicale rispetto all'analisi HTML.

Scriverò una grammatica, quindi scriverò un lexer contro quella grammatica che dovrebbe tokenizzare l'HTML e fornire gli offset che stai cercando.

Innanzitutto, analizzare il documento con Jsoup per verificare che sia un HTML valido.

Quindi, analizzare il documento in modo lessicale con una grammatica. Una grammatica potrebbe essere simile:

Document := {optional-opening-tag} | {literal} {optional-opening-tag} | {optional-closing-tag} 

optional-opening-tag := ["<" {literal} ">" {optional-opening-tag}|{literal} ] | "" 

optional-closing-tag := "</ {literal} ">" | "" 

literal := any string of characters not beginning with whitespace, or containing "<" 

Inserire ogni token che si trova in un oggetto che memorizza il token, l'indice del primo carattere, e la lunghezza.

+0

Sì, questa è la risposta giusta. Avevo già scritto un lexer usando JFlex, e funziona, e lo sto ancora usando, ma preferirei non mantenerlo. Stavo cercando di sbarazzarmi del codice. – ccleve