Hallo!
Folgendes: Ich habe für eine Application einen HTML Wrapper der HTML von eine HTML Seite extrahieren soll und in eine xml datei speichern, entwickelt. Hab es dann einem Kollegen zum testen geschickt und bei ihm läuft es nicht. Nach langem debuggen sind wir draufgekommen dass bei ihm die unten angeführte Methode einen leeren Array liefert, weil es nicht alle Tags einliest. Aber warum es das bei ihm nicht tut und bei mir schon kann ich mir nicht erklären. Es ist keine Frage von richtig aufrufen oder so ... muss was anderes sein. Bin sehr dankbar wenn jemand eine Idee hat!! Hier die Methode, die sollte eben teilstrings extrahieren und in ein array speichern:
es ist vielleicht kein 100% sauberes javascript bin aber nur anfänger
Danke schon mal im Vorraus !
lg Ninette
Folgendes: Ich habe für eine Application einen HTML Wrapper der HTML von eine HTML Seite extrahieren soll und in eine xml datei speichern, entwickelt. Hab es dann einem Kollegen zum testen geschickt und bei ihm läuft es nicht. Nach langem debuggen sind wir draufgekommen dass bei ihm die unten angeführte Methode einen leeren Array liefert, weil es nicht alle Tags einliest. Aber warum es das bei ihm nicht tut und bei mir schon kann ich mir nicht erklären. Es ist keine Frage von richtig aufrufen oder so ... muss was anderes sein. Bin sehr dankbar wenn jemand eine Idee hat!! Hier die Methode, die sollte eben teilstrings extrahieren und in ein array speichern:
Code:
function suche(string){
var seite = string;
var pos = 0;
var mode = 1;
var stack=new Array(); // für die speicherung von < tagsanfangszeichen
var posStack= new Array(); // für die speicherung von anfang und ende index von tags
var itempos= new Array(); // für die Speicherung von pos index von item infos
var voritems= new Array();
// die schleife durchläuft den html code der seite und filtert die position der teile die iteminfos beinhalten heraus und speichert sie in ein array
while(pos < seite.length){
ch=seite.charAt(pos);
switch(mode){
case 1:
mode=1;
if(ch=="<"){ // offenes tag gefunden
stack.push("otag");
posStack.push(pos); //postion des tags in posStrack speichern
mode=2; } // mode wechseln ... nach > suchen
pos++;
break;
case 2:
mode=2;
if(ch=="<"){ // sollte wieder ein offenes tag gefunden werden statt geschlossenes
stack.push("otag");
posStack.push(pos); // wird diese gespeichert
mode=2; // mode beibehalten
pos++; // pos erhöhen und abbrechen
break;
}
if(ch==">"){ // wenn ein geschlossenes > gefunden wird
stack.pop(); // der letzte eintrag von otag wird gelöscht
if(posStack.length==1){ // nur ein offenes tag gefunden
posStack.push(pos); // position des geschlossenen wird gespeichert
var i0=posStack[0]; //lesen der pos von <
var i1=posStack[1]; //lesen der pos von >
var tag = seite.slice(i0,i1); // tag estrahieren
alert(tag);
if(tag=="<div class=\"searchresultitem\""){ // nach dem tag soll gesucht werden
//der beginn der ergebnisse, pro item /index wird im array gespeichert
itempos.push(i0);
}
posStack.pop(); // nach dem lesen von der inhalt von < > werden die postitonen gelöscht
posStack.pop();
pos++;
mode=1;
break;
}else{ // es wurden mehrere offene tags gefunden als geschlossene
posStack.push(pos);
var i2=posStack[posStack.length-2]; // siehe oben
var i3=posStack[posStack.length-1];
var tagi= seite.slice(i2,i3);
alert(tagi);
if(tagi=="<div class=\"searchresultitem\""){
itempos.push(i2);
}
posStack.pop();
posStack.pop();
pos++;
mode=1;
break;
}
}
pos++;
break;
default: alert("fehler bei der modeauswahl");
pos++;
break;
}
}
var anzahlitems= itempos.length;
var prim= anzahlitems % 2;
if(prim!=0){ anzahlitems=anzahlitems-1}
for(var i=0; i<anzahlitems; i++){ // text zwischen den searchresultitems tags extrahieren und speichern
var index1=itempos[i];
var index2=itempos[i+1];
var inhalt=seite.slice(index1,index2);
voritems.push(inhalt);
}
return voritems;
}
es ist vielleicht kein 100% sauberes javascript bin aber nur anfänger
Danke schon mal im Vorraus !
lg Ninette