Seite 1 von 1

Easy PHP-Problem

Verfasst: Fr, 15. Nov. 13, 14:40
von konstrukt
Hallo,

ich betreue eine Vereins-Website, wobei ich allerdings zugeben muss, keine bis wenig PHP-Kenntnisse zu haben.
Ich möchte gerne den Spielverlauf der Liga aus einer xml-Datei auslesen. Die Struktur der Datei sieht so aus:

Hello,

I maintain a sportsclub website, although I must admit to have little to no knowledge of PHP.
I would like to read the history of the league table from a xml file. The structure of the file looks like this:

Code: Alles auswählen

<html>

        <head>
                ...
        </head>

        <body>

                ...
                    <content>
    <div class="samsContentBox ">
            <div class="samsContentBoxHeader">
                Mannschaft
            </div>
        <div class="samsContentBoxContent">
                ...
        </div>
    </div>
    <div class="samsContentBox ">
            <div class="samsContentBoxHeader">
                Tabellenverlauf
            </div>
        <div class="samsContentBoxContent">
                <p>
                    <table class="samsDataTable">
                        ...
                    </table>
                </p>
            <div></div>
        </div>
    </div>
    <div class="samsContentBox ">
            <div class="samsContentBoxHeader">
                Spielverlauf
            </div>
        <div class="samsContentBoxContent">
                <p>
------------------------------------------------
        <table class="samsDataTable">
            <tbody>
		...
            </tbody>
        </table>
------------------------------------------------
           ...

        </body>
</html>
Wie zu sehen ist, gibt es zwei Tabellen. Beide haben die Klasse samsDataTable. Ich benötige die zweite Tabelle, also den markierten Bereich.
Ich bin mir ziemlich sicher, dass das nur ein 5-Zeiler ist. Ich bekomms aber nicht hin.

As you can seen, there are two tables. Both have the class samsDataTable. I need the second table, so the marked area.
I'm pretty sure that this is only a 5-slice. But I can't figure it out.


Ich habe es zwar hinbekommen, die Datei auszulesen, aber das Ergebnis bringt mich so nicht weiter:

I can read the file and output, but the result so does not help me:

Code: Alles auswählen

 
$host = "FILEADDRESS";
$filestring = file_get_contents&#40;$host&#41;;
$startpos = 0;
while&#40;$pos = strpos&#40;$filestring, "<table class="samsDataTable">", $startpos&#41;&#41;
&#123;
    $string = substr&#40;$filestring, $pos, strpos&#40;$filestring, "</table>", $pos + 1&#41; - $pos&#41;;
    echo $string."</br>";
    $startpos = $pos + 1;
&#125;
 
Dieser Code stellt natürlich einfach alles ab der ersten Klasse samsDataTable dar.

This code of course shows everything from the first class samsDataTable.

Can anybody help me out?

Verfasst: Fr, 15. Nov. 13, 16:14
von NetFalcon
Ich möchte bemerken, dass du Daten aus einer HTML Datei ausliest, deren Autor aber den Spielverlauf wahrscheinlich auch aus irgendeiner anderen Quelle ausliest. (Vielleicht liegen die ja sogar irgendwo in einem JSON Format)

Will damit sagen, aus einer HTML Datei Daten auszulesen ist eher etwas umständlich, vielleicht kommst du ja an die Originaldaten dran ?

Falls nicht, kannst du folgenden Workaround benutzen:

strpos mit strripos ersetzen
strripos sucht immer das letzte Vorkommen in einer Zeichenkette,

strripos ($filestring, "<table>",

wenn es dann die letzte Tabelle auf der Seite ist, kannst du auch wieder mit strripos nach </table> suchen

Beide male bekommst du ja Zahlen zurück, mit der Position des gefundenen, damit kannst du ausrechnen wie Lang die Tabelle als Zeichensatz ist und dann in substr() einsetzen

http://www.php.net/manual/de/function.strripos.php
http://www.php.net/manual/de/function.substr.php

Verfasst: Fr, 15. Nov. 13, 16:44
von konstrukt
AAaah sooo einfach :shock:
Du bist mein persönlicher Held des Tages!! Damit komm ich endlich weiter!

Vielen vielen Dank!

BTW: Das ist eigentlich ne xml-Datei. Irgendwie wandelt der Editor hier aber den Code um...ist mir aber auch erst aufgefallen, als er das PHP nicht darstellen wollte.

Die originalen Daten zu nehmen wäre natürlich auch eine Option. Ich wollte eigentlich nur unseren Vereinsmitgliedern die Wege auf die wirklich nervige Verbandsseite sparen. Ich werd die aber eh nochmal anschreiben, ob ich das so überhaupt auslesen darf.

Danke für deine Hilfe! :D

Verfasst: Mo, 06. Jan. 14, 16:05
von plaicy
Hallo,

du hast es ja schon gelöst. Aber mit http://de3.php.net/manual/de/function.preg-match.php sollte es auch gehen, ohne, dass du erst Positionen finden musst, die du dann nachher noch einmal mit str... anwenden musst. Brauchst dafür aber einen regulären Ausdruck, wo dein Suchstring in Klammern gefasst ist.