Maison  >  Questions et réponses  >  le corps du texte

Filtre de format GetElementsByTagName (besoin d'aide urgente)

J'essaie de formater une NodeList que j'obtiens via getElementsByTagName, en fait je peux obtenir le contenu de chaque balise, mais je ne peux pas filtrer, j'essaie de faire en sorte que le résultat ressemble à ceci :

EXAMPLE:

name: jhon doe
number: 12345678
date: 00/00/0000

Mais je ne reçois que du contenu normal :

JOHN DOE
12345678
00/00/0000
lane DOE
7234567890
00/30/0000

Ou si j'utilise [0], il ne renvoie que la première lettre/numéro de chaque balise.

J
1
0
l
7
3

Mon code actuel est ci-dessous, des conseils sur ce que je peux faire ?

<?php
$string = '
<tbody>
<tr>
<td>JOHN DOE</td>
<td style="background-color: rgb(25, 194, 25);">12345678</td>
<td>00/00/0000</td>
</tr>
<tr>
<td>lANE DOE</td>
<td style="background-color: rgb(25, 194, 25);">7234567890</td>
<td>30/00/0000</td>
</tr>
</tbody>';
$dom = new DOMDocument();
$dom->loadHTML($string);
foreach($dom->getElementsByTagName('td') as $td) {
    echo $td->textContent[0] . '<br/>';
}

P粉518799557P粉518799557224 Il y a quelques jours496

répondre à tous(2)je répondrai

  • P粉464208937

    P粉4642089372024-04-02 19:49:46

    L'erreur que vous avez commise est que vous avez utilisé la balise td, qui ne renvoie pas chaque enregistrement mais chaque valeur (regardez votre code).

    Vous devez d'abord utiliser la balise "tr"

    Deuxièmement, vous devez utiliser nodeValue pour obtenir des données pour tout élément spécifique par index de mention

    Le code corrigé est donné à titre de référence. Si quelque chose n'est pas clair, n'hésitez pas à poser des questions

    .
    
    
    JOHN DOE
    12345678
    00/00/0000
    
    
    lANE DOE
    7234567890
    30/00/0000
    
    ';
    $dom = new DOMDocument();
    $dom->loadHTML($string);
    $tr = $dom->getElementsByTagName('tr');
    echo $tr->item(0)->nodeValue;

    Si vous souhaitez afficher tous les éléments, vous pouvez simplement utiliser une boucle

    répondre
    0
  • P粉546257913

    P粉5462579132024-04-02 12:23:08

    D'où espérez-vous que 姓名号码日期 vienne ? PHP n'a aucune idée de ce que signifient les valeurs du tableau, vous devez donc les définir vous-même d'une manière ou d'une autre.

    Il n'y a aucune indication en HTML sur la signification de chaque cellule du tableau, vous ne pouvez donc que deviner et espérer que la structure du tableau ne change jamais. Les tableaux sont triés par nom - numéro - date, vous pouvez donc déduire des numéros de cellule que l'étiquette d'un spécifique doit être : 0 = nom, 1 = numéro, 2 = date.

    Donc, si vous analysez le HTML pour chaque tableau ligne , puis analysez chaque ligne pour chaque tableau cellule , vous pouvez ajouter des balises en fonction de l'ordre des cellules.

    Mais veuillez noter que si le contenu du HTML provient d'une source externe et que celle-ci modifie l'ordre des cellules, une erreur se produira.

    //create an array of labels, based on the cell order per row
    $labels=[
        0=>'name',
        1=>'number',
        2=>'date'
        ];
    
    $dom = new DOMDocument();
    $dom->loadHTML($string);
    
    // search for table ROWS
    $table_rows = $dom->getElementsByTagName('tr');
    
    //loop the ROWS
    foreach($table_rows as $row){
       //per ROW node, search for table CELLS
       $row_cells = $row->getElementsByTagName('td');
       //loop the CELLS
       foreach($row_cells as $number => $cell){
         //echo a label based on the cell order + the contents of the cell
         echo $labels[$number].' - '.$cell->textContent.'
    '; } }

    répondre
    0
  • Annulerrépondre