Я использую этот код для получения элементов левой панели навигации:Проблем с несколькими атрибутами, а с помощью PHP Simple HTML DOM
function parseInit($url) {
$ch = curl_init();
$timeout = 0;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$data = parseInit("https://www.smile-dental.de/index.php");
$data = preg_replace('/<(d[ldt])(|>)/smi', '<div data-type="$1"$2', $data);
$data = preg_replace('/<\/d[ldt]>/smi', '</div>', $data);
$html = new simple_html_dom();
$html = $html->load($data);
Но столкнулся с такой проблемой.
Например, если я использую такой синтаксис для получения элементов: $html->find("div[data-type=dd].level2")
, то я получаю ВСЕХ элементов с данными атрибутами DT, DD, DL и имя класса LEVEL2. Если я использую другой синтаксис: $html->find("div.level2[data-type=dd]")
, то я получаю ВСЕ элементы с атрибутом данных DD, но с именами классов LEVEL1, LEVEL2 и LEVEL3 и т.д .. Не могли бы вы объяснить мне, в чем проблема? Заранее спасибо!
P.S .: Все элементы DT, DL и DD были изменены с регулярным выражением на элементы DIV с соответствующими атрибутами данных, поскольку этот парсер неправильно подсчитывает количество этих элементов.
разбор DOM _выключена_ осуществляется с помощью регулярных выражений, это делается с помощью DOM парсер ('DOMDocument' или' SimpleXMLElement'), они позволяют вам строить и управлять DOM надежно (т. Е. Заменять теги и т. Д.). –
Я рассказал о дополнительных действиях (не сделанных парсером) для преобразования некоторых элементов HTML. – jekahm
Да, все, что я говорю, это то, что вам действительно нужно искать альтернативные подходы: используя другой парсер, который может обрабатывать эти теги, например. Regex + Нерегулярные языки не смешиваются, это просто печальный факт жизни –