我正在尝试遍历HTML文档,特别是一个表,并在每行中选择特定的表格单元格。
所以我从我想要的表中抓取“/ tr”行,但是,我现在对于如何循环遍历行,选择特定的“td”表单元格内容感到困惑?
所以在foreach循环中,我想创建标题并在其下面粘贴特定的单元格,这有意义吗?
这是当前的PHP代码,它最终回显每个tr中所有td的所有内容 - 显然不是我想要的。
$version_list = new DOMDocument;
$version_list->loadHtml($version_html);
$xpath_r = new DOMXPath($version_list);
$versions = $xpath_r->query("//table[contains(@class, 'devices')]/tr");
foreach ($versions as $version)
{
echo '<strong>Version</strong><br />';
echo $version->nodeValue . '<br />';
}
示例HTML:
<table class="devices">
<tr>
<td>1.0</td>
<td>Works</td>
</tr>
<tr>
<td>2.0</td>
<td>Broken</td>
</table>
所以我想在foreach循环内为每一行选择单元格1和单元格2。
所以我想要这样的东西:
echo '<strong>Version</strong><br />';
echo $version->nodeValue (first cell) . '<br />';
echo '<strong>Status</strong><br />';
echo $version->nodeValue (second cell) . '<br />';
答案 0 :(得分:0)
你的意思是你只想抓住版本?
如果是这样,请使用:"//table[contains(@class, 'devices')]/tr/td[1]"
如果没有添加您想要的输出。
更新:
如果您想要一个可以拔除的子项索引,您需要遍历每个子节点或再次运行另一个查询:
<?php
$version_list = new DOMDocument;
$version_list->loadHtml($version_html);
$xpath_r = new DOMXPath($version_list);
$versions = $xpath_r->query("//table[contains(@class, 'devices')]/tr");
foreach ($versions as $version) {
$children = $xpath_r->query('*', $version);
echo '<strong>Version</strong><br />';
echo $children->item(0)->nodeValue. '<br />';
echo '<strong>Status</strong><br />';
echo $children->item(1)->nodeValue. '<br />';
}
<?php
$version_list = new DOMDocument;
$version_list->loadHtml('<table class="devices">
<tr>
<td>1.0</td>
<td>Works</td>
</tr>
<tr>
<td>2.0</td>
<td>Broken</td>
</table>');
$xpath_r = new DOMXPath($version_list);
$versions = $xpath_r->query("//table[contains(@class, 'devices')]/tr");
foreach ($versions as $version) {
$children = $version->getElementsByTagName('td');
echo '<strong>Version</strong><br />';
echo $children->item(0)->nodeValue. '<br />';
echo '<strong>Status</strong><br />';
echo $children->item(1)->nodeValue. '<br />';
}