Ankündigung

Einklappen
Keine Ankündigung bisher.

(html-)Tabelle parsen

Einklappen

Neue Werbung 2019

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

  • (html-)Tabelle parsen

    Moin!
    Ich habe hier mehrere html-Dateien, aus denen ich einzelne Tabellen herauslese. Das klappt auch alles soweit, nur würde ich die html-Tabellen jetzt irgendwie parsen, so dass ich die Daten in nem array, csv, oder sonst was hab.
    Kann mir jemand nen Tipp geben, wie ich das hinbekomme? Die Tabellen haben leider nich alle das komplett gleiche Format, sprich in den "td"s sind ab und an auch Attribute...

  • #2
    Vielleicht hilft dir ja der Hinweis, dass man <table>..</table>, <tr>..</tr>, <td>..</td> wie BBCode behandeln könnte.
    Die preg_match()-Treffer auf <table>(.*)</table> könntest du in einer Schleife durchlaufen und dann die preg_match-Treffer auf <tr>(.*) </tr> behandeln usw.

    Kommentar


    • #3
      mmmh, zumindest n ansatz allerdings waren regexp noch nie mein freund...

      habs mal mit sowas probiert, der gibt mir aber nur eine zeile zurück:
      PHP-Code:
      preg_match('/<tr>(.*?)<\\/tr>/i',$file$treffer); 

      Kommentar


      • #4
        benutz den Modifier U (ungreedy, nicht gefräßig)

        Kommentar


        • #5
          also statt dem /i ein /U? das hat nichts gebracht...
          ich merk auch grade, dass er mir in dem array zwar nur die erste zeile, die aber zweimal speichert. einmal mit <tr>...</tr> drum, einmal ohne :/

          //edit: ok, das scheint ka auch der sinn der funktion zu sein kann man ihm nich auch sagen, er soll mir einfach nen array mit allen treffern füllen?

          Kommentar


          • #6
            Ich habe nicht gesagt anstatt. Habe noch den Modifier s vergessen.

            Kommentar


            • #7
              ich glaub ich check diese ganze funktion gar nich so ganz...
              der knallt mir jetzt die komplette tabelle (ohne <(/)table>) in ein array-feld

              Kommentar


              • #8
                Und du hast dich auch noch ganze 4 Minuten daran versucht. Respekt, andere geben früher auf!
                Weil ich gerade nichts besseres zu tun hatte, hier Horst:

                PHP-Code:
                <?php
                header
                ('Content-type: text/plain');

                $code = <<<EOT
                <table>
                <tr>
                    <td>1a</td>
                    <td>1b</td>
                </tr><tr>
                    <td>2a</td>
                    <td>2b</td>
                </tr></table>

                <table>
                <tr>
                    <td>Eins A</td>
                    <td>Eins B</td>
                </tr><tr>
                    <td>Zwei A</td>
                    <td>Zwei B</td>
                </tr></table>
                EOT;

                $matches = array('table' => array(), 'tr' => array(), 'td' => array()); // nur der namentlichen Übersicht wegen
                preg_match_all('#<table(.*)>(.*)</table>#Uis'$code$matches['table']);
                for (
                $i 0$imax count($matches['table'][2]); $i $imax$i++) {
                    
                preg_match_all('#<tr(.*)>(.*)</tr>#Uis'$matches['table'][2][$i], $matches['tr']);
                    for (
                $k 0$kmax count($matches['tr'][2]); $k $kmax$k++) {
                        
                preg_match_all('#<td(.*)>(.*)</td>#Uis'$matches['tr'][2][$k], $matches['td']);
                        for (
                $m 0$mmax count($matches['td'][2]); $m $mmax$m++) {
                            
                print_r($matches['td']);
                        }
                    }
                }
                ?>

                Kommentar


                • #9
                  Wenn Du PHP 5 verwendest, kannst Du Dich auch an SimpleXML oder DOM versuchen:
                  PHP-Code:
                  <?php

                  $code 
                  = <<<EOT
                  <table>
                  <tr>
                      <td>1a</td>
                      <td>1b</td>
                  </tr><tr>
                      <td>2a</td>
                      <td>2b</td>
                  </tr></table>
                  EOT;

                  $table = new SimpleXMLElement($code);

                  $i 0;
                  foreach (
                  $table->children() as $tr) {
                      foreach (
                  $tr as $td) {
                          
                  $data[$i][] = (string) $td;
                      }
                      
                  $i++;
                  }
                  print_r($data);
                  ?>
                  http://php.net/simplexml
                  http://php.net/dom

                  Kommentar


                  • #10
                    das wäre in der Tat noch komfortabler

                    Kommentar


                    • #11
                      das klappt, besten dank!

                      Kommentar

                      Lädt...
                      X