GetElementsByTagName 格式过滤器(需要紧急帮助)
P粉518799557
P粉518799557 2024-04-02 00:41:46
0
2
507

我正在尝试格式化通过 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粉518799557
P粉518799557

全部回复(2)
P粉464208937

您犯的错误是您使用了 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;

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

P粉546257913

您期望姓名号码日期来自哪里? 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.'
'; } }

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板