首頁  >  問答  >  主體

GetElementsByTagName 格式過濾器(需要緊急協助)

我正在嘗試格式化透過 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粉518799557P粉518799557224 天前498

全部回覆(2)我來回復

  • P粉464208937

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

    您犯的錯誤是您使用了 td 標記,它不會傳回每個記錄,而是傳回每個值(查看您的程式碼)。

    首先你應該使用「tr」標籤

    其次,您應該使用nodeValue透過提及索引來取得任何特定項目的資料

    給予更正後的程式碼供您參考,有任何不清楚的地方請隨時提問

    
    
    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;

    如果你想輸出所有的項目,你可以簡單地使用循環

    回覆
    0
  • P粉546257913

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

    您期望姓名號碼日期來自哪裡? PHP 不知道表值的含義,因此您必須以某種方式自行設定它們。

    HTML 中沒有指示每個表格單元格的含義,因此您只能猜測並希望表格結構永遠不會改變。這些表格按名稱 - 數字 - 日期排序,因此您可以從儲存格編號推斷出特定 的標籤必須為:0 = 名稱、1 = 數字、2 = 日期。

    因此,如果您解析每個表格的 HTML,然後解析每個表格單元格的每行,您可以根據單元格順序新增標籤。

    但請注意,如果 HTML 的內容來自外部來源並且它們更改了單元格的順序,則會出錯。

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

    回覆
    0
  • 取消回覆