Avatar billede jonasbc Nybegynder
26. august 2003 - 13:52 Der er 10 kommentarer og
1 løsning

En hurtig parser

Hej!

Jeg roder lidt med en HTML parser, der hurtigt vokser sig meget stor... Jeg gennemløber dokumentet tag for tag og skal herefter se, om jeg "genkender" hvert enkelt tag.
Det foregår lige nu på følgende måde:

while (flere tags){
  if (tag er <html>){
      gør noget
  }
  else if (tag er <head>){
      gør noget
  }
  else if (tag er <body>){
      gør noget
  }
  else if... osv. osv.
}

Mit spørgsmål er nu: Er der en lettere/hurtigere/pænere måde at sammenligne på end de mange if-else'er??
Avatar billede jonasbc Nybegynder
26. august 2003 - 13:53 #1
Forresten har jeg overvejet en switch, men den fungerer vel kun med tal... Desuden bli'r det ikke meget kønnere af den grund.
Avatar billede skwat Praktikant
26. august 2003 - 13:58 #2
generelt plejer en case at være bedre, hvis du så sætter det udtryk du forventer flest af øverest, så er du godt på vej.
Avatar billede arne_v Ekspert
26. august 2003 - 13:59 #3
switch er kun på ordinale typer.

Hvis du kan nøjes med XHTML, så kan du bare hente DTD/schema og bruge
en XML parser. Piece of cake.

Hvis det er normal ikke-W3C-compliant-men-OK-i-MSIE-HTML, så bliver du
nødt til at parse.

En måde at cleane din kode op på var at bruge en parse generator.

F.eks. JavaCC.
Avatar billede danielmuhlig Nybegynder
26. august 2003 - 13:59 #4
var tags[] = {"<html>", "<head>", "<body>" ... };

for(var i=0; i<tags.length; i++) {
  if(tag = tags[i]) {
    gør noget
  }
}

NB: Jeg er ikke helt stiv i javascript syntax'en
Avatar billede jonasbc Nybegynder
26. august 2003 - 14:06 #5
Som nævnt fungerer en switch med cases desværre ikke...

Browseren skal gerne kunne anvendes til den vis grad på det "rigtige" Internet, så det drejer sig om "ikke-W3C-compliant-men-OK-i-MSIE-HTML" :)

Jeg kender ikke JavaCC, men jeg vil prøve at kigge lidt på det. Alternativt kan man vel lave koden om til XHTML og derefter bruge en XML parser?
Avatar billede arne_v Ekspert
26. august 2003 - 14:08 #6
daniel>

java != javascript

og:

tag = tags[i]

er:

tag.equals(tags[i])

i java.
Avatar billede arne_v Ekspert
26. august 2003 - 14:09 #7
jonas>

Du kan kun få en meget lille del (formentlig <5%) af siderne på
internette gennem en XML parser.

Men du kan da prøve at kigge lidt på JavaCC.

Et alternativ er cup.

[men jeg har aldrig fået cup til at køre på Windows - JavaCC er nem]
Avatar billede jonasbc Nybegynder
26. august 2003 - 14:14 #8
Det vil jeg prøve... Dog kan jeg ikke finde andet end dokumentation til JavaCC på nettet. Har du et link??
Avatar billede arne_v Ekspert
26. august 2003 - 14:16 #9
Avatar billede arne_v Ekspert
26. august 2003 - 14:16 #10
Jeg kan iøvrigt se at jeg er bagefter - de siger v3.2 - jeg kører v2.1 !
Avatar billede jonasbc Nybegynder
26. august 2003 - 14:20 #11
Lækkert... jeg kigger på det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester