PHP的DomXPath没有像预期的那样工作

时间:2015-06-01 01:04:50

标签: php html html5 xpath domxpath

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

为了一个简单的开始,我尝试使用td获取所有class="left"元素并回显其内部文本。我努力理解的是为什么这段代码:

    $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不识别标记名称一样。有没有人遇到同样的问题?

1 个答案:

答案 0 :(得分:2)

我还没有测试过,但这可能是命名空间问题。您的输入页面是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;
}