Maison  >  Article  >  développement back-end  >  Comment puis-je extraire le texte d'éléments HTML spécifiques avec différentes classes dans des tableaux séparés à l'aide de PHP ?

Comment puis-je extraire le texte d'éléments HTML spécifiques avec différentes classes dans des tableaux séparés à l'aide de PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-21 12:01:10917parcourir

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

Extraire le texte d'éléments HTML spécifiques dans des tableaux

Problème :

Vous possédez un contenu HTML avec des éléments contenant à la fois des titres et texte régulier. Votre objectif est d'extraire le texte des éléments avec une classe désignée ("Heading1-H" pour les titres, "Normal-H" pour le texte) dans deux tableaux distincts : $heading et $content.

Solution :

Utilisation de PHP DOM et XPath

PHP DOM (Document Object Model) et XPath (XML Path Language) offrent une solution robuste pour cette tâche. Voici la mise en œuvre :

$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;
}

Sortie :

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/>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn