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;
}
我正在尝试解析此 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;
}