Intereting Posts
Twitter OAuth: пользователи / поисковые работы, но поиск / твиты не Чтение данных из текстового файла и формирование таблицы с использованием php Как после получения информации от БД отправьте электронное письмо Ошибка загрузки файла php ajax Значение поля PHP preg_match как установить непрозрачность непрозрачности изображения во время загрузки? MySQL: mysql_fetch_assoc (): предоставленный аргумент не является допустимым ресурсом результата MySQL php PDO :: FETCH_CLASS отображает все свойства нижнего регистра вместо camelCase Учебник по отправке UPS (PHP) JSON недействителен (JSONview), но я не вижу, как Как отправить запрос на удаление из PHP jquery .ajax всегда возвращает ошибку – данные добавляются в базу данных Magento – проблема с созданием настраиваемого модуля Как получить запрос `$ _POST`, когда 404 перенаправляется через .htaccess? Возьмите значение innerHTML с помощью метода post PHP

<tbody> сбой в PHP Простой HTML DOM-парсер

Я использую PHP Simple HTML DOM Parser, чтобы очистить некоторые данные в интернет-магазине (также работает XAMPP 1.7.2 с PHP5.3.0), и у меня возникают проблемы с <tbody> . Структура таблицы очень важна (подробности не так важны):

 <table> <thead> <!--text here--> </thead> <tbody> <!--text here--> </tbody> </table> 

Теперь я пытаюсь добраться до раздела <tbody> , используя код:

 $element = $html->find('tbody',0)->innertext; 

Он не бросает никаких ошибок, он просто ничего не печатает, когда я пытаюсь повторить его. Я тестировал код на других элементах, <thead> , <table> , даже что-то вроде <span class="price"> и все они работают нормально (конечно, удаление ", 0" не дает кода). Все они дают свои правильные разделы. Наружный текст. Но все это терпит неудачу на <tbody> .

Теперь я просматривал Парсер, но я не уверен, что смогу это понять. Я заметил, что <thead> даже не упоминается, но он отлично работает. пожимание плечами

Думаю, я мог бы попытаться сделать навигацию с детьми, но, похоже, это тоже сбой. Я только что попробовал запустить:

 $el = $html->find('table',0); $el2 = $el->children(2); echo $el2->outertext; 

и без кубиков. Попробовал заменить children first_child и 2 на 1, и все еще не first_child кости. Забавно, хотя, если я попытаюсь ->find вместо children , он отлично работает.

Я довольно уверен, что могу найти работу вокруг всего, но это поведение кажется довольно странным, чтобы публиковать здесь. Мой любопытный ум рад за всю помощь, которую он может получить.

в файле simple_html_dom.php или удалите строку # 396

 // if ($m[1]==='tbody') continue; 

Для этой проблемы есть отчет об ошибке: http://sourceforge.net/p/simplehtmldom/bugs/79/

Он еще открыт на момент написания этой статьи. Существует альтернативное решение, если вы не хотите изменять исходный код, например, в цикле, чтобы найти <tr> 's

 <?php // The *BROKEN* way to find the <tr>'s // below the <tbody> below the <table id="foo"> foreach($dom->find('tbl#foo tbody tr') as $tr) { /* you will get nothing */ } 

Вместо этого вы можете выборочно проверять имя родительского тега во время итерации всех <tr> , например:

 <?php // A workaround to find the <tr>'s // below the <tbody> below the <table id="foo"> foreach($dom->find('tbl#foo tr') as $tr) { // note the lack of tbody selector /* you will get all trs, but let's only work with ones with the parent of a tbody! */ if($tr->parent->tag == 'tbody') { // our workaround /* this part will work as you would expect the above broken code to work */ } } 

Также обратите внимание, что немного не связанная с проблемой проблема, с которой я столкнулся, что инспекторы Chrome и FF исправят суп с тегами в отношении <tbody> и <thead> . Будьте осторожны – посмотрите только на фактический источник – держитесь подальше от инспекторов DOM, если вы столкнетесь с необъяснимыми проблемами.

Удостоверьтесь, что ваш твой результат исходит от выполнения javascript. Я столкнулся с той же проблемой с тегом span. Позже я обнаружил, что если какой-либо html-код попадает на страницу через jquery / любое другое выполнение javascript, тогда в этом случае simple_html_dom просто терпит неудачу.

Удостоверьтесь, что tbody действительно есть. Многие браузеры будут добавлять tbody к таблицам в панели проверки, даже если они не присутствуют в ответе.