GetElementsByTagName 格式过滤器(帮助)

GetElementsByTagName format filter (HELP)

我正在尝试格式化通过 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] 它 returns 只有每个标签的第一个 letter/number。

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

你犯的错误是你使用的是 td 标签,它不是 return 每条记录,而是 return 每个值(查看你的代码)。

首先你应该使用“tr”标签

其次,您应该使用 nodeValue 通过提及 index

来获取任何特定项目的数据

修改后的代码供大家参考,有什么不明白的地方欢迎提问

<?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);
$tr = $dom->getElementsByTagName('tr');
echo $tr->item(0)->nodeValue;

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

您认为 namenumberdate 来自哪里? PHP 不知道 table-values 是什么意思,所以你必须自己设置它们。

HTML 中没有说明每个 table 单元格的含义,因此您只能猜测并希望 table 结构永远不变。 table 的顺序是名称 - 编号 - 日期,因此您可以从单元格编号中扣除特定 <td> 的标签必须是什么:0 = 名称,1 = 编号,2 = 日期。

因此,如果您按 table row 解析 HTML,然后按 table cell对于每一行,您可以根据单元格顺序添加标签。

但是请注意,如果 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.'<br>';
    }
}