Maison > développement back-end > tutoriel 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 ?

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
Libérer: 2024-11-21 12:01:10
original
1044 Les gens l'ont consulté

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;
}
Copier après la connexion

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/>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal