tabelle parsen?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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

      Comment


      • #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
        Last edited by zzaphod; 02-07-2008, 00:08.

        Comment


        • #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!

          Comment


          • #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).
            Last edited by zzaphod; 02-07-2008, 16:18.

            Comment


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

              Shitstorm Podcast – Wöchentliches Auskotzen

              Comment


              • #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!

                Comment

                Working...
                X