我正在嘗試格式化透過 getElementsByTagName 獲得的 NodeList,實際上我可以獲取每個標籤的內容,但我無法過濾,我正在嘗試使輸出如下:
EXAMPLE: name: jhon doe number: 12345678 date: 00/00/0000
但我只得到正常內容:
JOHN DOE 12345678 00/00/0000 lane DOE 7234567890 00/30/0000
或如果我使用 [0],它只會傳回每個標籤的第一個字母/數字。
J 1 0 l 7 3
我目前的程式碼如下,有什麼關於我可以做什麼的提示嗎?
<?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
您犯的錯誤是您使用了 td 標記,它不會傳回每個記錄,而是傳回每個值(查看您的程式碼)。
首先你應該使用「tr」標籤
其次,您應該使用nodeValue透過提及索引來取得任何特定項目的資料
給予更正後的程式碼供您參考,有任何不清楚的地方請隨時提問
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
如果你想輸出所有的項目,你可以簡單地使用循環
P粉5462579132024-04-02 12:23:08
您期望姓名
、號碼
和日期
來自哪裡? PHP 不知道表值的含義,因此您必須以某種方式自行設定它們。
HTML 中沒有指示每個表格單元格的含義,因此您只能猜測並希望表格結構永遠不會改變。這些表格按名稱 - 數字 - 日期排序,因此您可以從儲存格編號推斷出特定 因此,如果您解析每個表格行的 HTML,然後解析每個表格單元格的每行,您可以根據單元格順序新增標籤。 但請注意,如果 HTML 的內容來自外部來源並且它們更改了單元格的順序,則會出錯。 的標籤必須為:0 = 名稱、1 = 數字、2 = 日期。
//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.'
';
}
}