PHP 的 DomXPath 未按预期方式工作

PHP's DomXPath not working the way it was expected

我正在尝试解析此 HTML 页面:http://www.valor.com.br/valor-data/moedas

作为一个简单的开始,我试图用 class="left" 获取所有 td 元素并呼应它们的内部文本。我很难理解的是为什么这段代码:

    $finder = new DomXPath($dom);
    $tds = $finder->query("//*[@class='left']");
    foreach ($tds as $td) {
        echo $td->textContent;
    }

给了我预期的输出(一堆属于 td 元素的词,不值得在这里粘贴)而这个:

    $finder = new DomXPath($dom);
    $tds = $finder->query("//td[@class='left']");
    foreach ($tds as $td) {
        echo $td->textContent;
    }

一无所获。我也试过 $finder->query("//td") 来简单地获取所有 td 元素,但它就像 DomXPath 不识别标签名称。有人遇到过同样的问题吗?

我没有测试过,但这可能是一个命名空间问题。您的输入页面是 XHTML,并且已正确声明 XHTML 命名空间。因此,您需要注册一个命名空间前缀并在您的查询中使用该前缀。

像这样

$finder = new DomXPath($dom);
$finder->registerNamespace("x", "http://www.w3.org/1999/xhtml");
$tds = $finder->query("//x:td[@class='left']");
foreach ($tds as $td) {
    echo $td->textContent;
}