Heim > Fragen und Antworten > Hauptteil
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粉4642089372024-04-02 19:49:46
您犯的错误是您使用了 td 标记,它不会返回每个记录,而是返回每个值(查看您的代码)。
首先你应该使用“tr”标签
其次,您应该使用nodeValue通过提及索引来获取任何特定项目的数据
给出更正后的代码供您参考,有任何不清楚的地方请随时提问
JOHN DOE 12345678 00/00/0000 '; $dom = new DOMDocument(); $dom->loadHTML($string); $tr = $dom->getElementsByTagName('tr'); echo $tr->item(0)->nodeValue; lANE DOE 7234567890 30/00/0000
如果你想输出所有的项目,你可以简单地使用循环
P粉5462579132024-04-02 12:23:08
您期望姓名
、号码
和日期
来自哪里? PHP 不知道表值的含义,因此您必须以某种方式自行设置它们。
HTML 中没有指示每个表格单元格的含义,因此您只能猜测并希望表格结构永远不会改变。这些表格按名称 - 数字 - 日期排序,因此您可以从单元格编号中推断出特定 因此,如果您解析每个表格行的 HTML,然后解析每个表格单元格的每行,您可以根据单元格顺序添加标签。 但是请注意,如果 HTML 的内容来自外部源并且它们更改了单元格的顺序,则会出错。 的标签必须为:0 = 名称、1 = 数字、2 = 日期。
//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.'
';
}
}