Maison > Questions et réponses > le corps du texte
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粉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 '; $dom = new DOMDocument(); $dom->loadHTML($string); $tr = $dom->getElementsByTagName('tr'); echo $tr->item(0)->nodeValue; lANE DOE 7234567890 30/00/0000
Si vous souhaitez afficher tous les éléments, vous pouvez simplement utiliser une boucle
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 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. spécifique doit être : 0 = nom, 1 = numéro, 2 = date.
//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.'
';
}
}