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;
如果你想输出所有项目,你可以简单地使用循环
您认为 name
、number
和 date
来自哪里? 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>';
}
}
我正在尝试格式化通过 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;
如果你想输出所有项目,你可以简单地使用循环
您认为 name
、number
和 date
来自哪里? 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>';
}
}