我正在尝试解析此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不识别标记名称一样。有没有人遇到同样的问题?
答案 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;
}