tabelle parsen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • tabelle parsen?

    Hallo, ich versuch schon seit einigen Stunden einen regulären ausdruck für das Parsen der Zelleninhhalte einer Tabelle zu finden. Bekomm aber leider nicht ansatzweise einen hin.

    Kann mir da bitte jemand etwas weiterhelfen?

    Im Ende möchte ich einfach nur die Zelleninhalte (td) pro Zeile(tr) haben. Wobei "Ein etwas längerer Eintrag" für mich keine Bedeutung hat.

    1000 Dank!

    Code:
    <table boder="0" cellspacing="0" cellpadding="2" width="100%" class="m">
    	<tr>
    		<td class="zeile_a" valign="top">Eintrag 1</td>
    		<td class="zeile_a" valign="top">Eintrag 2</td>
    		<td class="zeile_a" valign="top">Eintrag 3</td>
    		<td class="zeile_a" valign="top">Eintrag 4</td>
    		<td class="zeile_a" valign="top">Eintrag 5</td>
    
    	</tr>
    	<tr>
    		<td colspan="5" class="zeile_a" valign="top">Ein etwas längerer Eintrag</td>
    	</tr>
    	<tr>
    		<td class="zeile_b" valign="top">Eintrag 1</td>
    		<td class="zeile_b" valign="top">Eintrag 2</td>
    		<td class="zeile_b" valign="top">Eintrag 3</td>
    
    		<td class="zeile_b" valign="top">Eintrag 4</td>
    		<td class="zeile_b" valign="top">Eintrag 5</td>
    	</tr>
    	<tr>
    		<td colspan="5" class="zeile_b" valign="top">in etwas längerer Eintrag</td>
    	</tr>
    	<tr>
    		<td class="zeile_a" valign="top">Eintrag 1</td>
    		<td class="zeile_a" valign="top">Eintrag 2</td>
    		<td class="zeile_a" valign="top">Eintrag 3</td>
    		<td class="zeile_a" valign="top">Eintrag 4</td>
    		<td class="zeile_a" valign="top">Eintrag 5</td>
    
    	</tr>
    	<tr>
    		<td colspan="5" class="zeile_b" valign="top">in etwas längerer Eintrag</td>
    	</tr>
    </table>

  • #2
    Ich glaube, mit SimpleXML (respektive irgend einer anderen XML-Klasse), wirst du das am komfortabelsten machen können.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Ich versteh nicht genau, was du willst, aber vielleicht hilft dir das:
      PHP-Code:
      preg_match_all('|<td.*>(.*)</td>|iU'$txt$found);
      echo 
      "<pre>";
      var_dump($found);
      echo 
      "</pre>"
      Gruss
      H2O

      Kommentar


      • #4
        Ich denke ich versteh, was du meinst...

        Annahme in $html steht der HTML-Quelltext

        PHP-Code:
             function get_table_contents($html){
                 
                 
        $table_pattern '%<table.*?>(.*?)</table>%s';
                 
        $tr_pattern '%<tr>(.*?)</tr>%s';
                 
        $td_pattern '%<td.*?>(.*?)</td>%s';
                 
                 
        preg_match_all($table_pattern$html$matches);
                 for (
        $i=0$i<= sizeof($matches[1])-1$i++){
                    
        $temp $matches[1][$i];
                    
                    
        preg_match_all($tr_pattern$temp$matches2);
                     for (
        $n=0$n<= sizeof($matches2[1])-1$n++){
                        
        $temp2 $matches2[1][$n];
                         
                        
        preg_match_all($td_pattern$temp2$matches3);
                         for (
        $k=0$k<= sizeof($matches3[1])-1$k++){
                            
        $temp3 $matches3[1][$k];
                            
        $tables[$i][$n][$k] = $temp3;                
                         }                 
                         
                     }
                                
                }
                        
                return 
        $tables;
             }

             
             
        $tables get_table_contents($html);
             
        print_r($tables); 
        baut ein mehrdimensionales Array mit den Inhalten aller Tables a la $Inhalt[Tabelle][Zeile][Spalte]. Auf dein Beispiel bezogen:

        Code:
        Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => Eintrag 1
                            [1] => Eintrag 2
                            [2] => Eintrag 3
                            [3] => Eintrag 4
                            [4] => Eintrag 5
                        )
        
                    [1] => Array
                        (
                            [0] => Ein etwas l�ngerer Eintrag
                        )
        
                    [2] => Array
                        (
                            [0] => Eintrag 1
                            [1] => Eintrag 2
                            [2] => Eintrag 3
                            [3] => Eintrag 4
                            [4] => Eintrag 5
                        )
        
                    [3] => Array
                        (
                            [0] => in etwas l�ngerer Eintrag
                        )
        
                    [4] => Array
                        (
                            [0] => Eintrag 1
                            [1] => Eintrag 2
                            [2] => Eintrag 3
                            [3] => Eintrag 4
                            [4] => Eintrag 5
                        )
        
                    [5] => Array
                        (
                            [0] => in etwas l�ngerer Eintrag
                        )
        
                )
        
        )
        Evtl. müssen die Regex's nochmal angepasst werden. Ist aus der hohlen Hand geschrieben, bei mir hats jedenfalls funktioniert.

        cheers, zz
        Zuletzt geändert von zzaphod; 02.07.2008, 00:08.

        Kommentar


        • #5
          Das ist nicht dein ernst, 3 reguläre Ausdrücke so verschachtelt anzuwenden, oder? Da bist du mit jeder XML-Extension schneller und vor allem übersichtlicher. Eine XPath-Query und das Ding ist doch gegessen!

          Kommentar


          • #6
            Sofern sein er/sein Hoster die DomXML hat, ja. Ich hab sie bei meinen teilweise eben nicht. Außerdem sind 0.39ms auch nicht so langsam (natürlich systemabhängig).
            Zuletzt geändert von zzaphod; 02.07.2008, 16:18.

            Kommentar


            • #7
              Find ich für den Task arschlangsam.
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                Es geht mir nicht um die Geschwindigkeit, es ist einfach der falsche Ansatz. Ich kann meine Dose Tomatenmark auch mit Hammer und Nagel aufmachen, das geht. Mit dem Dosenöffner ist es natürlich viel eleganter!

                Kommentar

                Lädt...
                X