# Bestimmte Bereiche einer HTML Datei auslesen



## CyberRon (28. Juni 2007)

Hallo Zusammen,

ich bräuchte mal euere Hilfe. Ich muss eine HTML Datei mit PHP auslesen. Es gibt bestimmte Bereiche im Dokument die ich benötige...


```
<html>
.
.
.
<body>

<p>irgend ein text...</p>

<h1>Headline</h1>
<p>wieder text...</p>
<h2>Noch eine Headline</h2>
<p>wider text</p>
<hr />

<p>irgend ein text...</p>

<h1>Headline</h1>
<p>wieder text...</p>
<h2>Noch eine Headline</h2>
<p>wider text</p>
<hr />

</body>
</html>
```

Das Dokument ist relativ lange und beinhaltet noch Tabellen und und und.

So, ich benötige aber immer nur einen bestimmten Abschnitt im Dokument und zwar den ab <h1> bis <hr /> Kann mir jemand helfen wie man so etwas ausliest?

Schonmal vielen Dank...
CR


----------



## RS9999 (28. Juni 2007)

Dafür gibt es in PHP preg_match oder preg_match_all und
unzählige Beispiele bei tutorials.de.
Suche nach "regulärem Ausdruck".


----------



## Napofis (28. Juni 2007)

ich machs mit

$inhalt = file_get_contents("http://www.xxx.de");

und die variable kannste dann mit strpos usw durchsuchen


----------



## Michael Engel (28. Juni 2007)

Da ich nett bin und preg_match eher kompliziert finde für anfänger hier nochmal ein beispiel wie es aussieht:


```
<?
$tmp = "<html>
.
.
.
<body>

<p>irgend ein text...</p>

<h1>Headline</h1>
<p>wieder text...</p>
<h2>Noch eine Headline</h2>
<p>wider text</p>
<hr />

<p>irgend ein text...</p>

<h1>Headline</h1>
<p>wieder text...</p>
<h2>Noch eine Headline</h2>
<p>wider text</p>
<hr />

</body>
</html>";

$tmp = preg_match_all('%<h1>(.*)</h1>%Uis', $tmp,$found);
foreach ($found[1] as $row){
    echo $row."\n";
}

/**
 * Ausgabe:
 * 
 * Headline
 * Headline
 */
?>
```

Einlesen ist ja relativ einfach mit dem genannten file_get_contents()


----------



## CyberRon (28. Juni 2007)

vielen dank, das klappt wunderbar. Aber ich glaub ich hab da ein Denkfehler...

Also die HTML Seite hat jede Menge solcher Bloecke immer beginnend mit einem H1 Tag und endet mit einem HR. 


```
<h1>Headline 1</h1>
<h2>Noch eine Headline 1</h2>
<p>wieder text...1</p>
<hr />

<h1>Headline 2</h1>
<h2>Noch eine Headline 2</h2>
<p>wieder text... 2</p>
<hr />
```

Nun moechte ich jeden einzelnen Block von <h1 ...  bis ... <hr /> in einer eigenen Variable stehen haben damit ich diese Daten in eine Datenbank speichern kann. Wie das mit dem speichern geht weiss ich, aber ich schaff es nicht die Daten einzeln aus dem HTML Dokument zu ziehen, das es am Ende so ausssieht

$headline_h1 = "Headline 1";
$headline_h2 = "Noch eine Headline 1";
$text_p = "wieder text ...1";

Nun wuerde der INSERT in die DB folgen.

$headline_h1 = "Headline 2";
$headline_h2 = "Noch eine Headline 2";
$text_p = "wieder text ...2";

Wieder ei Update...

Sorry ich kann es nicht besser erklaeren. Das Ganze ist eine private Aktion fuer eine Clanpage, also nichts kommerzielles. Nochmals Danke fuer euere Hilfe.


----------



## Michael Engel (28. Juni 2007)

Hatte nicht gelesen das du alle willst..


```
<?
$tmp = "<html>
.
.
.
<body>

<p>irgend ein text...</p>

<h1>Headline</h1>
<p>wieder text...</p>
<h2>Noch eine Headline</h2>
<p>wider text</p>
<hr />

<p>irgend ein text...</p>

<h1>Headline</h1>
<p>wieder text...</p>
<h2>Noch eine Headline</h2>
<p>wider text</p>
<hr />

</body>
</html>";

$tmp = preg_match_all('%<h1>(.*)</h1>.<p>(.*)</p>.<h2>(.*)</h2>.<p>(.*)</p>%Uis', $tmp,$found);
unset($found[0]);
print_r($found);

/**
 * Ausgabe:
Array
(
    [1] => Array
        (
            [0] => Headline
            [1] => Headline
        )

    [2] => Array
        (
            [0] => wieder text...
            [1] => wieder text...
        )

    [3] => Array
        (
            [0] => Noch eine Headline
            [1] => Noch eine Headline
        )

    [4] => Array
        (
            [0] => wider text
            [1] => wider text
        )

)
 */
?>
```


----------



## saftmeister (28. Juni 2007)

Nach meiner Logik sollte sowas auch mit SimpleXML oder DOM funktionieren, letzendlich is HTML auch nur eine Untermenge von XML.


----------

