Filtre de format GetElementsByTagName (besoin d'aide urgente)
P粉518799557
P粉518799557 2024-04-02 00:41:46
0
2
543

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粉518799557
P粉518799557

répondre à tous(2)
P粉464208937

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

P粉546257913

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.'
'; } }

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal