Yritän javalla kirjottaa semmosta ohjelmanpätkää joka lataisi html-sivun (tai -koodin pikemminkin) ja sieltä etsisi tiettyjen tägien (esim <a href..) sisukset. Käytän URL- ja URLConnection -luokkia, joilla helposti saakin html-koodin, sekä headereita tekstimuotoisena latailtua. Aloin sitten näpräämään regular-expressioneiden avulla sitä tagien purkamista, mutta sitten eräs hemmo sanoi, että javassa on valmiit välineet niitten tagien purkamiseen, eikä siten niitten reg.exp:ien kanssa tarvitsisi puuhastella. Se ei vaan osannut sanoa että millä välineillä ja miten homma sitten hoidettaisiin. Osaisiko joku täällä valaista asiaa?
Javassa on mukana ainakin XML-parseri, jolla homma pitäisi hoitua. Haet vaan netistä lisäksi jonkun HTML-version DTD-määrittelyn. Itse olen käyttänyt niitä niin vähän, että en osaa suoraa esimerkkiä antaa, mutta tutki org.xml.sax pakettia (ja sen alapaketteja) ja sen luokkia.
Google osaa varmaan kertoa lisää.
Menee yli hilseen noi xml:t ja sax:it, joten jatkan regular expression:ien kanssa. Tällänen pulma tuli seuraavaksi: en saa ulos tietyn sanan alku- ja loppukohtaa rivin sisältä. Tutoriaalista oon yrittänyt lukea, ja ymmärsin että käyttämällä sulkuja pitäisi onnistua. esim. lauseesta "eka toka kolmas neljäs" reg-expillä (toka) pitäisi matches.start() antaa arvon 5. Mutta kun laitan noita sulkeita sinne niin matchiä ei löydy. Tällatavalla oon kirjottanut sen koodiin: String regex="\\(toka\\)";. Jos laittaa .* alkuun ja loppuun niin sittenhän matchi löytyy, mutta .start() antaa arvon 0 ja .end rivin viimeisen merkin position.
hmm... eiks ton tagien välin sais näin:
String html; int alku = html.indexOf("<"+tagi+">"); int loppu = html.indexOf("</"+tagi+">"); String tulos = html.substring(alku,loppu);
tää ei tietenkään toimi jos tagiin on laitettu lisäksi parametreja ja toisaalta tämä löytää vain ensimmäisen aloitus ja lopetus tagin.
1) Kannattaa etsiä vain "<tagi" niin parametrit eivät vaikuta hakuun. Tuossakin toki pitäisi ottaa huomioon isot ja pienet kirjaimet jne.
2) Loppumerkkinä HTML:ssä voi olla myös "/>" tai tagilla ei välttämättä ole loppua ollenkaan. Näitten huomioiminen tekee hommasta jo melko haasteellista, XML olisi paljon helpompi parsittava tämän takia.
3) Ekan tagin löydyttyä voi indexOf:illa toki jatkaa ja hakea seuraavaa jne.
Aihe on jo aika vanha, joten et voi enää vastata siihen.