Penapis format GetElementsByTagName (perlukan bantuan segera)
P粉518799557
P粉518799557 2024-04-02 00:41:46
0
2
506

Saya cuba memformat NodeList yang saya dapat melalui getElementsByTagName, sebenarnya saya boleh mendapatkan kandungan setiap tag, tetapi saya tidak boleh menapis, saya cuba membuat output seperti ini:

EXAMPLE:

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

Tetapi saya hanya mendapat kandungan biasa:

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

Atau jika saya menggunakan [0], ia hanya mengembalikan huruf/nombor pertama setiap tag.

J
1
0
l
7
3

Kod semasa saya ada di bawah, ada petua tentang perkara yang boleh saya lakukan?

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

membalas semua(2)
P粉464208937

Kesilapan yang anda lakukan ialah anda menggunakan tag td, yang tidak mengembalikan setiap rekod tetapi setiap nilai (lihat kod anda).

Mula-mula anda hendaklah menggunakan tag "tr"

Kedua, anda harus menggunakan nodeValue untuk mendapatkan data bagi mana-mana item tertentu dengan indeks sebutan

Kod yang diperbetulkan diberikan untuk rujukan anda Jika ada yang kurang jelas, sila tanya soalan



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;

Jika anda ingin mengeluarkan semua item, anda boleh menggunakan gelung

P粉546257913

Dari manakah anda menjangkakan 姓名号码日期 berasal? PHP tidak tahu apa maksud nilai jadual, jadi anda perlu menetapkannya sendiri entah bagaimana.

Tiada petunjuk dalam HTML maksud setiap sel jadual, jadi anda hanya boleh meneka dan berharap struktur jadual tidak pernah berubah. Jadual diisih mengikut nama - nombor - tarikh, jadi anda boleh menyimpulkan daripada nombor sel bahawa label untuk tertentu mestilah: 0 = nama, 1 = nombor, 2 = tarikh.

Jadi, jika anda menghuraikan HTML untuk setiap jadual baris , dan kemudian menghuraikan setiap baris untuk setiap jadual sel , anda boleh menambah teg berdasarkan susunan sel.

Tetapi sila ambil perhatian bahawa jika kandungan HTML datang daripada sumber luaran dan ia mengubah susunan sel, ralat akan berlaku.

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan