suchen

Heim  >  Fragen und Antworten  >  Hauptteil

GetElementsByTagName-Formatfilter (benötige dringend Hilfe)

Ich versuche, eine NodeList zu formatieren, die ich über getElementsByTagName erhalte. Tatsächlich kann ich den Inhalt jedes Tags abrufen, aber ich kann nicht filtern. Ich versuche, die Ausgabe so zu gestalten:

EXAMPLE:

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

Aber ich bekomme nur normale Inhalte:

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

Oder wenn ich [0] verwende, wird nur der erste Buchstabe/die erste Zahl jedes Tags zurückgegeben.

J
1
0
l
7
3

Mein aktueller Code ist unten. Gibt es Tipps, was ich tun kann?

<?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粉518799557237 Tage vor514

Antworte allen(2)Ich werde antworten

  • 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;

    如果你想输出所有的项目,你可以简单地使用循环

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

    Antwort
    0
  • StornierenAntwort