У меня есть html-строка
html_string = '<div class="quote" post_id="48" style="border:1px solid #000;padding:15px;margin:15px;" user_id="1" user_name="rashidfarooq">This is not True</div> <div class="quote" post_id="49" style="border:1px solid #000;padding:15px;margin:15px;" user_id="1" user_name="rashidfarooq">This is good for me</div> <div class="genuine" post_id="49" style="border:1px solid #000;padding:15px;margin:15px;" user_id="1" user_name="rashidfarooq">This is good for me</div>';
Я хочу считать div, имеющим класс name = "quote", я попробовал
$dom = new DOMDocument; $dom->loadHTML($html_string); $divs = $dom->getElementsByTagName('div'); $length = $divs->length;
Но $ length дает общее количество div. Как я могу подсчитать только divs, имеющие имя класса = «quote». Есть ли какая-либо функция PHP Native, которая может это сделать.
Кажется, для этого нет родной функции domdocument, но ее легко написать самостоятельно:
function getElementsByClassName($elements, $className) { $matches = array(); foreach($elements as $element) { if (!$element->hasAttribute('class')) { continue; } $classes = preg_split('/\s+/', $element->getAttribute('class')); if ( ! in_array($className, $classes)) { continue; } $matches[] = $element; } return $matches; } $dom = new DOMDocument; $dom->loadHTML($html_string); $divs = getElementsByClassName($dom->getElementsByTagName('div'), 'quote'); $length = $divs->length;
Попробуйте
$DOMResponse = new \DOMDocument(); $DOMResponse->loadXML($data); $xpath = new \DOMXPath($DOMResponse); $length = $xpath->query('/*[@class="quote"]')->length;
где quote
– это класс, который вы хотите запросить
Если вы также хотите фильтровать до, для divs, вам нужно запросить divs до и затем применить запрос, который я предложил выше
Что-то вроде этого
$length = $xpath->query('//div[@class="quote"]')->length;