Auslesen einer Partnerseite in XML, Inhalt der Variablen wird nicht erkannt

Hallo an alle,

danke nochmal für den Tipp mit xml.

Mir fiel jetzt nur auf, daß zwar im head xml angegeben ist, der Rest aber in html ist.

So bringt mir ja parsen mit den xml Funktionen in php recht wenig.

Hier mal ein Beispiel der Datei:

HTML:
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 10">
<link rel=File-List href="F_0-Dateien/filelist.xml">
<link rel=Edit-Time-Data href="F_0-Dateien/editdata.mso">
<link rel=OLE-Object-Data href="F_0-Dateien/oledata.mso">
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:LastAuthor>Usuario</o:LastAuthor>
  <o:LastSaved>2008-07-26T08:37:58Z</o:LastSaved>
  <o:Version>10.6839</o:Version>
 </o:DocumentProperties>
</xml><![endif]-->

Und jetzt der eigentliche Code zum Einlesen:

HTML:
<body link=blue vlink=purple>
<!--Die folgenden Informationen wurden durch Microsoft Excels
Web-Formular-Assistent erstellt.--><!--Falls das gleiche Element mit Excel veröffentlicht wird, werden alle
Informationen zwischen den DIV-Etiketten ersetzt.--><!-----------------------------><!--START OF OUTPUT FROM EXCEL PUBLISH AS WEB PAGE WIZARD --><!----------------------------->

<table x:str border=0 cellpadding=0 cellspacing=0 width=768 style='border-collapse:
 collapse;table-layout:fixed;width:584pt'>
 <col class=xl24 width=117 style='mso-width-source:userset;mso-width-alt:4278;
 width:88pt'>
 <col width=21 span=31 style='mso-width-source:userset;mso-width-alt:768;
 width:16pt'>
 <tr class=xl25 height=24 style='mso-height-source:userset;height:18.0pt'>
  <td height=24 class=xl26 width=117 style='height:18.0pt;width:88pt'><span
  style='mso-spacerun:yes'> </span>F001</td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
  <td class=xl25 width=21 style='width:16pt'></td>
 </tr>
 <tr height=17 style='mso-height-source:userset;height:12.75pt'>
  <td height=17 class=xl27 style='height:12.75pt'></td>
  <td class=xl28 align=right x:num>1</td>
  <td class=xl28 align=right x:num>2</td>
  <td class=xl28 align=right x:num>3</td>

usw.

Also war der ursprüngliche Lösungsansatz ja schon ganz O.K.

Jetzt weiß ich nur immer noch nicht, warum die if Abfrage die Monate nicht erkennt, obwohl diese im Array vorhanden sind ($monat['string'][0])?

Bin für jede Hilfe dankbar,
bis bald,

mallmis
 
Zuletzt bearbeitet:
Hallo liebe Forum Gemeinde,

sorry, war leider die letzten Tage damit beschäftigt unseren neuen AVM Router zu installieren(Fritz!Box 7270). Hier in Spanien nicht einfach. Jetzt läuft aber alles.

Nochmal zu meinem Problem, weiß denn niemand Rat?

Ich schaue mir jetzt meinen Code nochmal genau durch. Falls aber jemand doch noch einen Tipp oder Hinweis hat, bitte ich darum ihn hier zu posten.

Vielen Dank schonmal,

mallmis

EDIT: Hängt es vielleicht mit dem charset zusammen
 
Zuletzt bearbeitet:
Hallo,

habe jetzt mal versucht, das windows-1252 mittels mb_convert_encoding in utf-8 umzuwandeln, leider ohne Ergebnis, bzw. dnach der Umwandlung wurde der Monat immer noch nicht erkannt....
Menno:mad:

Hoffe jemand hat noch eine Idee...

Gruß

mallmis
 
Wo genau hast du das var_dump() ausgeführt?
Mach es mal direkt über der if-Abfrage des Monats.
Pack auch mal ein var_dump() in die if-Abfrage, um zu schauen ob die Bedingung nicht doch erfüllt ist.
 
Hallo,

vielen Dank für den Tipp.

" string(73) "vor if: Juli 2008
" string(75) "waehrend if: Juli 2008

so auch bei den anderen Monaten, obwohl string(xx) immer unterschiedlich ist.

Also das sollte passen.

Aber aus irgend einem Grund erkennt die if oder elseif Abfrage den Monat nicht.

Hm, hängt es vielleicht doch mit den strings zusammen?

EDIT: STOP! Während if Abfrage kommt nix, hab var_dump falsch gesetzt
 
Zuletzt bearbeitet:
Hola,

habe dann nach der ganzen if und ifelse Liternei nochmal ein var_dump gesetzt und da kam auch nix dabei raus.

Irgendwo dazwischen geht wohl was verloren.
 
Die Zahl innerhalb der Klammer gibt die Länge des Strings an - was bei dir irgendwie überhaupt nicht zusammen passt.

Macht es einen Unterschied, wenn du in der if-Abfrage trim( $monat['string'][0] ) == "Juli 2008" schreibst?
trim() entfernt Leerzeichen und ähnliches in einem String.

Ansonsten kopier bitte mal jeglichen relevanten Quellcode, so bringt das ja nichts. ;)
 
Habe jetzt den ganzen Code mal gekürzt und frage nur einen Monat ab:

PHP:
<?php
error_reporting(E_ALL);
class data_pars { 
     
    var $datei; 
    var $read_laenge = 2000; 
    var $result; 

     
    function set_datei($datei) { 
         
        $this->datei = $datei; 
    } 
     
    function read($start,$ende) { 
         
        $file = @fopen ($this->datei,"r"); 
     	$inhalt = ""; 
        while (!feof($file)) { 
     
            $inhalt .= fgets($file,$this->read_laenge); 
        } 
         
        if(!$start) $start = 0; 
        if(!$ende) $ende = strlen($inhalt); 
         
        if($ende > strlen($inhalt)) $ende = strlen($inhalt); 
         
        $this->result = substr($inhalt,$start,$ende); 
         
    } 
     
    function get_result() { 
         
        return $this->result; 
    } 
     
    function get_in_out($in,$out,$in_out) { 
         
    $output = ""; 
    $anzahl_ende = strlen($out); 
    $anzahl_start = strlen($in); 
    $start = 0;  
    $anzahl = substr_count($this->result, $in); 
    $count = 0; 
     
    if(!$in_out) { 
        $ad_start = $anzahl_start; 
        $ad_ende = $anzahl_ende; 
    } 
     
    while($count < $anzahl) { 
     
        $ar_start = strpos($this->result, $in, $start); 
        $ar_ende = strpos($this->result, $out, $ar_start + $anzahl_start); 
        $ar_string = substr($this->result,$ar_start + $ad_start, $ar_ende - $ar_start + $anzahl_ende - $ad_ende - $ad_start); 
        
        $output['start'][] = $ar_start; 
        $output['ende'][] = $ar_ende - $ar_start + $anzahl_ende; 
        $output['string'][] = trim($ar_string); 
         
        $start = $ar_start + $anzahl_start; 
                 
        $count++; 
         
    }     
         
     
    return $output; 
     
    }     
         
     
} 

// Datenbank - Zugriff
	    
	    $status 	=	mysql_connect("localhost", "xxxxxxxx", "xxxxxxx");
	    if ( ! $status )
	    {
		die("konnte Datenbankserver nicht erreichen!");
	    }
	    
	    $status	=	mysql_select_db("xxxxxxxx-belegung");
	    if ( ! $status )
	    {
		die("konnte Datenbank nicht erreichen! " . mysql_error() );
	    }
		mysql_query("SET SQL_BIG_SELECTS=1");
		

  //hier wird das Object der Klasse gebildet und in $data gespeichert.




 //nun wird die Datei festgelegt, welche ausgelesen werden soll

for ($i = 0; $i <= 19; $i++)
	{
		$data = new data_pars();
		$data->set_datei('http://xxxxxxxx:xxxxxxxx@www.ambiente-mallorca.info/members/Belegung/F_0.htm');
		$data->read('0','2500000');
		$tabelle = $data->get_in_out('<table','</table>',false); 
		$data->result = $tabelle['string'][0]; 
		$reihen 	= $data->get_in_out('<tr','</tr>',false);
		$data->result = $reihen['string'][$i];
		$id_agentur = $data->get_in_out('</span>','</td>',false);
		
		if (!empty($id_agentur['string'][0]))
		{
		$id_ag		= $id_agentur['string'][0];
		
		echo ("Die ID von Ambiente lautet: " . $id_agentur['string'][0] . '</br>');
		}
		else
		{
		$monat 		= $data->get_in_out("height:12.75pt'>",'</td>',false);
		$feld 		= $data->get_in_out('<td class=xl','>&nbsp;</td>',false); 
		}
		if ((empty($monat['string'][0])) OR ($feld['string'][0] == "28 align=right x:num>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28"))
		{
		echo ("In dieser Spalte ist keine Information enthalten</br>");
		}
		else
		{
		for ($ii = 0; $ii <= 30; $ii++)
			{
			$feld[$ii] 	= $feld['string'][$ii];
			var_dump('vor 2. if: ' . $monat['string'][0] . '</br>');
			
			if ($monat['string'][0] == "August 2008")
				{
				echo ("das war ein richtiges Ergebnis</br>" );
				var_dump('waehrend: ' . $monat['string'][0] . '</br>');
				}
				else
				{
				echo ("das war kein Ergebnis</br>" );
				}
			}
		
		}

	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
</body>
</html>


Bei dem var_dump vorher wird mir der richtige Code ausgegeben.
Während nicht, klar, weil anscheinend die Bedingung nicht erfüllt ist.

Probiere jetzt mal den trim() Befehl. Irgendwas scheint da echt nicht zu stimmen.

Bis gleich,

mallmis
 
Hola,

trim habe ich durchgeführt:

PHP:
$monat['string'][0] = trim($monat['string'][0]);

brachte aber nichts, die var_dump ausgabe lieferte das:

string(73) "Juli 2008"

string(75) "August 2008"


und so weiter...:confused::confused::confused:


mallmis
 
Zurück