SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 15.10.2013, 13:56:26
kratsching kratsching ist offline
Anfänger
 
Registriert seit: Oct 2013
Alter: 36
Beiträge: 3
DOM zerpflücken

Hallo Gemeinde!

ich habe folgende Aufgabe und stehe etwas auf dem Schlauch:

Es existiert eine automatisch generierte HTM-Datei, aus der ich die Klartext-Informationen herauslesen möchte. Dazu habe ich mir gedacht, wäre wohl das DOM am besten geeignet.

Im allgemeinen ist die Datei als Tabelle mit teilweise ineinander verschachtelten Zellen aufgebaut. Nur die jeweils "innerste" dieser Zellen enthält Text, den ich extrahieren möchte.

Meine Idee wäre es nun, von oben herab den DOM-Baum herunterzulaufen und an jedem Knoten zu prüfen, ob dieser einen childNode hat, oder nicht und falls nicht, so soll der textContent als nächster Eintrag in ein Array geschrieben werden.

Hier ein Beispiel zu solch einer Tabelle:

HTML-Code:
                  <table width="100%" cellpadding="0" border="0">
                    <col width="5%"/>
                    <col width="95%"/>
                    <tr>
                      <td colspan="1" rowspan="1"/>
                      <td colspan="1" rowspan="1" style="background-color:lightgrey">
                        <b>
                          Linked Product
                        </b>
                      </td>
                    </tr>
                  </table>
                </td>
              </tr>
              <tr>
                <td>
                  <table width="100%" cellpadding="0" border="0">
                    <col width="5%"/>
                    <col width="25%"/>
                    <col width="70%"/>
                    <tr>
                      <td colspan="1" rowspan="1"/>
                      <td colspan="1" rowspan="1">
                        <b>
                          Endplatte.1
                        </b>
                      </td>
                      <td colspan="1" rowspan="1">
                        <table width="100%" cellpadding="0" border="0" style="font-size:smaller">
                          <col width="30%"/>
                          <col width="70%"/>
                          <tr>
                            <td colspan="1" rowspan="1">
                              Maturity
                            </td>
                            <td colspan="1" rowspan="1">
                              IN_WORK
                            </td>
                          </tr>
                        </table>
                        <table width="100%" cellpadding="0" border="0" style="font-size:smaller">
                          <col width="30%"/>
                          <col width="70%"/>
                          <tr>
                            <td colspan="1" rowspan="1">
                              Major Version
                            </td>
                            <td colspan="1" rowspan="1">
                              ---
                            </td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                  </table>
                </td>
              </tr>
            </table>
Meine bisherigen Versuche erzeugen mir aber eine Ausgabe, die mir den Textinhalt jeder Zelle (jedes <td>...</td>) ausgibt, selbst wenn darin noch weitere Zellen stehen. Dies führt dazu, dass die Textinhalte mehrfach in das Array gelesen werden.

Ich hoffe, ich habe das jetzt erstmal gut genug erklärt, vielleicht kann mir ja jemand von euch weiterhelfen. Falls ich Informationen ergänzen soll, dann sagt bitte einfach bescheid.

Viele Grüße,

kratsching

Geändert von kratsching (15.10.2013 um 13:57:25 Uhr) Grund: Rechtschreibung :-D
Mit Zitat antworten
  #2  
Alt 15.10.2013, 14:28:31
kratsching kratsching ist offline
Anfänger
 
Registriert seit: Oct 2013
Alter: 36
Beiträge: 3
AW: DOM zerpflücken

Nachtrag:

Um meine Skipt-Idee zu verdeutlichen, hier mein bisheriger Versuch einer Rekursion:

PHP-Code:
<?php

//Prüfen, ob childNodes vorhanden sind
function checkChild($element){
    if(
$element->hasChildNodes()){
        
//Nimm den nächsten Knoten und prüfe wieder
        
$childs $element->childNodes;
        foreach(
$childs as $child){
            
checkChild($child);
        }
    } else {
        echo 
"<pre>";print_r($element->textContent); echo "</pre>";
    }
}


//restlicher Bla

$dom = new DOMDocument();
$dom -> loadHTMLFile("test.html");

$node $dom->getElementsByTagName("td");
foreach (
$node as $element){
    
//echo "<pre>";print_r($element->textContent); echo "</pre>";
    
checkChild($element);
}

?>
Mit Zitat antworten
  #3  
Alt 15.10.2013, 15:31:37
kratsching kratsching ist offline
Anfänger
 
Registriert seit: Oct 2013
Alter: 36
Beiträge: 3
AW: DOM zerpflücken

Ok, ich bin vom Schlauch gestiegen und habe jetzt folgenden Ansatz gewählt:

PHP-Code:

<?php

function checkForText($elements$text){
    foreach(
$elements as $node){
        foreach(
$node->childNodes as $child) {
            
$data[] = array($child->textContent);
        }
    }
    return 
$data;
}



error_reporting(0);

$dom = new DOMDocument();
$dom -> loadHTMLFile("test.html");
$text = array("");

$elements $dom->getElementsByTagName('td');

$result checkForText($elements$text);
echo 
"<pre>";print_r($result[1]); echo "</pre>";

?>
Dieses Skript macht jetzt das, was ich möchte. Allerdings war es irgendwie doch eher eine Kombination aus "Mein Hirn kennt den Weg" und "Vielleicht hilft mir dieses Snippet weiter"...

Kann mir evtl jemand von euch erklären, warum das Array, das hierbei erstellt wird die Werte mehrfach enthält und nur Ausgabe von $results[1] das richtige Ergebnis ausspukt?

Grüße
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:23:58 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt