html — PHP 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 не распознает имена тегов. Кто-нибудь когда-нибудь сталкивался с такой же проблемой?

0

Решение

Я не проверял, но это, вероятно, проблема с пространством имен. Ваша входная страница имеет формат 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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]