1 回答

TA貢獻1825條經驗 獲得超4個贊
目前,您只是獲取 all 中的所有文本內容<td>。并且它不會將鏈接包含在錨標記內。為此,您需要更深入地研究<td>.
這是使用以下方法來完成此操作的一種方法xpath:
$xpath = new DOMXpath($DOM);
$base = 'https://www.iana.org/';
foreach($Detail as $sNodeDetail)
{
$aDataTableDetailHTML[$j][] = trim($sNodeDetail->textContent);
if ($link = $xpath->evaluate("string(./span[contains(@class, 'domain')]/a/@href)", $sNodeDetail)) {
$aDataTableDetailHTML[$j][] = "{$base}{$link}";
}
$i = $i + 1;
$j = $i % count($aDataTableHeaderHTML) == 0 ? $j + 1 : $j;
}
基本上,查詢只是提取href當前<td>迭代中的值<span class="domain tld"><a href="xxxx">xxx</a></span>并獲取該href值。
另一種方法是迭代每個<tr>而不是每個<td>:
$aDataTableDetailHTML = [];
$DOM = new DOMDocument();
$DOM->loadHTML($htmlContent);
$xpath = new DOMXpath($DOM);
$base = 'https://www.iana.org/';
foreach($xpath->query('//table[@id="tld-table"]/tbody/tr') as $row) {
$domain = trim($xpath->evaluate("string(./td[1])", $row));
$type = $xpath->evaluate("string(./td[2])", $row);
$tld_manager = $xpath->evaluate("string(./td[3])", $row);
$url = $xpath->evaluate("string(./td[1]/span/a/@href)", $row);
$aDataTableDetailHTML[] = [$domain, $type, $tld_manager, "{$base}{$url}"];
}
- 1 回答
- 0 關注
- 136 瀏覽
添加回答
舉報