Я пытаюсь разобрать эту 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 не распознает имена тегов. Кто-нибудь когда-нибудь сталкивался с такой же проблемой?
Я не проверял, но это, вероятно, проблема с пространством имен. Ваша входная страница имеет формат 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;
}
Других решений пока нет …