Gå til innhold

Fjerne HTML-tagger i en tekstfil


Anbefalte innlegg

Videoannonse
Annonse

Høres ut som en veldig enkel metode hadde vært å bruke en HTML parser NekoHTML.

Så kan man bare gå igjennom alle tagsene og skrive ut tekst-innholdet mellom dem.

---- Rettelse---

Kom til å tenke på at jeg prøvde å bruke den parseren selv, og det var ikke mye lett å hente tekst ut ifra den :)

 

Alternativ to altså, vanlig XML parser, .

Xerces. Problemet med den er at den ikke godtar all mulig ukorrekt HTML (eg <br> uten </br> osv).

her er no kode jeg slengte opp iløpet av 5 min. NB, utestet og ikke mye pen! :)

public void JegKjederMegAltforMye_Part2(String whereIsJooAtLittleFile) throws IOException, JDOMException
{
 java.io.File theFile = new File(whereIsJooAtLittleFile);
 org.jdom.Document theDocument = new org.jdom.input.SAXBuilder().build(theFile);
 
 org.jdom.Element rootElement = theDocument.getRootElement();
 
 printOutText(rootElement);
}

private void printOutText(org.jdom.Element theElementHandled)
{
 System.out.println(theElementHandled.getText());
 java.util.List elementChildren = theElementHandled.getChildren();
 for (int childNr = 0; childNr < elementChildren.size(); childNr++)
 {
 	org.jdom.Element childElement = (org.jdom.Element) elementChildren.get(childNr);
 	printOutText(childElement);
 }
}

Endret av Rolf_OLE
Lenke til kommentar

Det er jo ikke verre enn å iterere gjennom strengen og finne start og slutttegn for tags da:

 /* Ikke testet, men det skal ikke være langt unna: */

String stripTags(String s) {
   StringBuffer buf = new StringBuffer();
   boolean b = false;
   for(int i=0;i<s.length();i++) {
       if(s.charAt(i)=='<') {
           b=false;
           continue;
       }
       if(s.charAt(i)=='>') {
           b=true;
           continue;
       }
       if(b)
           buf.append(s.charAt(i));
   }
   return buf.toString();
}

Lenke til kommentar

Heh.. Overså kanskje ordet 'enkelt' når jeg tipset om StreamTokenizer; pain å bruke imo.

 

Hvis det går greit å lese filen linje for linje, i.e. det ikke finnes tags som går over flere linjer, kan du prøve mailman's kode, eller fikse noe selv med String.split() eller StringTokenizer.

Hvis ikke kan det bli bra å skrive en decorator for InputStream(Reader?) som fungerer som mailman's kode?

Lenke til kommentar

Hvis du legger alt i en vector først!

Gjør deretter følgende:

Gå igjennom vectoren med en for løkke og

vec.elementAt(i).toString().toLowerCase().replaceAll("<","");

 

Tilsvarende for >!!

 

Har ikke testet dette!!!

Lenke til kommentar
  • 2 uker senere...
  • 1 måned senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...