webForumDet fria alternativet

parsa html strängar

12 svar · 380 visningar · startad av Mc Fetto

Mc FettoMedlem sedan nov. 20022 355 inlägg
#1

Jag har en databas som innehåller html-taggar och text. När jag nu ska pressentera datan så vill jag bli av med html-taggarna. Finns det ngn bra färdig funktion för detta eller?

Man kan ju gå igenom hela texterna och leta efter start och sluttaggarna och sedan ta bort taggarna efter hand. Men det borde ju redan finnas färdiga funktioner för detta!

Mc FettoMedlem sedan nov. 20022 355 inlägg
#2

Löste det, men kanske inte på det effektivaste sättet. optimering är välkommen!

				String str = (String) result.getObject( "html" );
		
				char[] ch = str.toCharArray();				
				boolean bool = false;
				String st = "";
				for (int i = 0;i<ch.length;i++)
				{
					if (ch[i] == '<' || bool == true && ch[i] != '>')
					{
						bool = true;
						ch[i] = '<';					
					}
					else if (ch[i] == '>')
					{
						ch[i] = '<';
						bool = false;
					}	
					if (ch[i] != '<' && ch[i] != '>')
						st += ch[i];				
				}

Eller om det är ngn som har en bra funktion i bakfickan!

Mc FettoMedlem sedan nov. 20022 355 inlägg
#3

Märkte snabbt att den inte var så super bra...

om man har följande:

Foto: Filip Skala</i></TD></TR></TABLE>Nu finns

blir till följande:

Foto: Filip SkalaNu finns

Antagligen bara en i mängden av fel som kan uppstå...
Så frågan kvarstår... finns det ngn pareser för html att tilgå?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

RegExp skulle jag välja:

String str = "<html><head><title>foobar</title></head><body><p>foobar</p></body></html>";
	
System.out.println(str.toLowerCase().replaceAll("</?(" +
    "html|head|title|body|p"
+ ")>",""));

Sedan får man givetvis modifiera uttrycket för önskad formatering.

:)

ViktorMedlem sedan aug. 20021 752 inlägg
#5

Du kan köra med regexp, här är ett exempel

public class Test
{
	public static void main(String arg[])
	{
		String html="<html><head><title>Kalle Anka</title></head><body>This is the body</body></html>";
		html=html.replaceAll("<[^>]*>","");
		System.out.println("HTML: " +html);
	}
}

EDIT: Här var man inte snabb :)
Du kan byta ut "" mot " " så får du ett mellanslag mellan orden.

/Viktor

Mc FettoMedlem sedan nov. 20022 355 inlägg
#6

Viktor skrev:

Du kan köra med regexp, här är ett exempel

public class Test
{
	public static void main(String arg[])
	{
		String html="<html><head><title>Kalle Anka</title></head><body>This is the body</body></html>";
		html=html.replaceAll("<[^>]*>","");
		System.out.println("HTML: " +html);
	}
}

EDIT: Här var man inte snabb :)
Du kan byta ut "" mot " " så får du ett mellanslag mellan orden.

/Viktor

En aningens enklare lösning :) , men det kvarstår att det missas mellanrum på vissa ställen, där taggarna utgör ngt slags mellanrum som t ex Table... Provade även din EDIT ;)
Problemet är att det endast är vissa taggar som skapar ett "mellanrum"!

Mc FettoMedlem sedan nov. 20022 355 inlägg
#7

Hehe, börjar bli lite trött nu tror jag... tnx peter o viktor :D

Mc FettoMedlem sedan nov. 20022 355 inlägg
#8
<BR><TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 WIDTH=220  align=right><TR><TD><IMG SRC=/dbimages/1013107395-777_panlak3_020206.jpg border=0 0,0 kb alt="Custemo Pantern vs. &#133;"></TD></TR><TR><TD></TD></TR><TR><TD align=right><i>Foto: Filip Skala</i></TD></TR></TABLE>xx xxxxx en lista ute där samtliga spelare finns med xxxx xxxx x xxxxxx xxxxxx under säsongen.<br />

Denna sträng vet jag inte hur jag ska lösa, det blir lite stora mellanrum här och var... tror denna sträng kan vara representativ för alla problemen jag har!

och då använder jag mig av följande:

				String str = (String) result.getObject( "html" );
				str=str.replaceAll("<[^>]*>"," ");
				str=str.replaceAll("  "," ");
Aleph_OneMedlem sedan juni 2003372 inlägg
#9

Du kan lägga det sista i en loop

str = str.trim();
int len = -1;
while(len != str.length())
{
	len = str.length();
	str=str.replaceAll("  "," ");
}

Borde iofs finnas effektivare sätt, men är det inga större mängder så spelar det ingen roll.

spangoMedlem sedan juni 20008 205 inlägg
#10

Eftersom replaceAll tar emot en regexp kan man säga str=str.replaceAll(" +"," "); så byts alla efter varandra liggande mellanslag ut mot ett.

Mc FettoMedlem sedan nov. 20022 355 inlägg
#11

Tackar alla, ska nog ta och förnya mina kunskaper om reguljära uttryck!

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Du kan ju testa denna också:

import java.util.regex.*;

public class Foo {
    public static void main(String args[]) {
	String str = "...";
	Pattern p = Pattern.compile( ">[^<>]+<" );
	Matcher m = p.matcher(str);
	
	while (m.find()) {
	    String gr = m.group();
	    System.out.println( gr.substring(1, gr.length()-1) );
	}
    }
}

:)

johanmMedlem sedan sep. 20022 inlägg
#13

finns ett paket på https://www.do.org/products/ som man kan parsa html kod med, fungerar som StreamTokenizer

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)