Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich mit PHP Text aus bestimmten HTML-Elementen mit unterschiedlichen Klassen in separate Arrays extrahieren?

Wie kann ich mit PHP Text aus bestimmten HTML-Elementen mit unterschiedlichen Klassen in separate Arrays extrahieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-21 12:01:10917Durchsuche

How can I extract text from specific HTML elements with different classes into separate arrays using PHP?

Text aus bestimmten HTML-Elementen in Arrays extrahieren

Problem:

Sie besitzen HTML-Inhalt mit Elementen, die sowohl Überschriften als auch enthalten normaler Text. Ihr Ziel besteht darin, den Text aus Elementen mit einer bestimmten Klasse („Heading1-H“ für Überschriften, „Normal-H“ für Text) in zwei separate Arrays zu extrahieren: $heading und $content.

Lösung:

Verwendung von PHP DOM und XPath

PHP DOM (Document Object Model) und XPath (XML Path Language) bieten eine robuste Lösung für diese Aufgabe. Hier ist die Implementierung:

$test = <<<HTML
<p class="Heading1-P">
    <span class="Heading1-H">Chapter 1</span>
</p>
<p class="Normal-P">
    <span class="Normal-H">This is chapter 1</span>
</p>
<p class="Heading1-P">
    <span class="Heading1-H">Chapter 2</span>
</p>
<p class="Normal-P">
    <span class="Normal-H">This is chapter 2</span>
</p>
<p class="Heading1-P">
    <span class="Heading1-H">Chapter 3</span>
</p>
<p class="Normal-P">
    <span class="Normal-H">This is chapter 3</span>
</p>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($test);
$xpath = new DOMXPath($dom);
$heading = parseToArray($xpath, 'Heading1-H');
$content = parseToArray($xpath, 'Normal-H');

var_dump($heading);
echo "<br/>";
var_dump($content);
echo "<br/>";

function parseToArray(DOMXPath $xpath, string $class): array
{
    $xpathquery = "//*[@class='$class']";
    $elements = $xpath->query($xpathquery);

    $resultarray = [];
    foreach ($elements as $element) {
        $nodes = $element->childNodes;
        foreach ($nodes as $node) {
            $resultarray[] = $node->nodeValue;
        }
    }

    return $resultarray;
}

Ausgabe:

array(3) {
  [0] => string(8) "Chapter 1"
  [1] => string(8) "Chapter 2"
  [2] => string(8) "Chapter 3"
}
<br/>
array(3) {
  [0] => string(15) "This is chapter 1"
  [1] => string(15) "This is chapter 2"
  [2] => string(15) "This is chapter 3"
}
<br/>

Das obige ist der detaillierte Inhalt vonWie kann ich mit PHP Text aus bestimmten HTML-Elementen mit unterschiedlichen Klassen in separate Arrays extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn