- PHP Domdocument Get selectors Class Tags Table img Elements
- PHP Domdocument Get selectors Class Tags Table img Elements
- php – Getting DOM elements by classname
- get a complete table with php DOM and print it
- get src from image tag using PHP DOM parse
- Related posts:
- Получение элементов DOM по имени класса
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Using PHP DOM document, to select HTML element by its class and get its text
- Answer
- Solution:
- Answer
- Solution:
- Share solution ↓
- Additional Information:
- Didn’t find the answer?
- Similar questions
- Write quick answer
- About the technologies asked in this question
- PHP
- HTML
- Welcome to programmierfrage.com
- Get answers to specific questions
- Help Others Solve Their Issues
PHP Domdocument Get selectors Class Tags Table img Elements
PHP Domdocument Get selectors Class Tags Table img Elements
In this Post We Will Explain About is PHP Domdocument Get selectors Class Tags Table img Elements With Example and Demo.Welcome on Pakainfo.com – Examples, The best For Learn web development Tutorials,Demo with Example! Hi Dear Friends here u can know to Like as a PHP DOM multiple class selector and PHP DOM selector id and PHP DOM selector attribute as well as PHP selectorsExample
In this post we will show you Best way to implement php get src from image tag and php get all images from url, hear for PHP DOM selector child and PHP DOM select element with PHP DOM selector classwith Download .we will give you demo,Source Code and examples for implement Step By Step Good Luck!.
php – Getting DOM elements by classname
$dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->validateOnParse = true; $dom->loadHTML($content); $dom->preserveWhiteSpace = false; $xpath = new \DOMXpath($dom); $rows_data = $xpath->query('//tr[@class="my-class-name"]'); var_dump($rows_data);
get a complete table with php DOM and print it
$html = "validateOnParse = true; $mydom->loadHTML($html); $xpath = new DOMXPath($mydom); $table_data =$xpath->query("//*[@id='liveiddata']")->item(0); // for printing simple the dtaa whole html data th and tr and td table just type: print $mydom->saveXML($table_data); $data_rows = $table_data->getElementsByTagName("tr"); foreach ($data_rows as $my_row) < $live_cells = $my_row ->getElementsByTagName('td'); foreach ($live_cells as $datacel) < // print datacel' content as Like as a value print $datacel->nodeValue; > >
get src from image tag using PHP DOM parse
$u_id = "live24u_"; $postThumbLinks = $xpath->query("//td[@class='cardtable-cardimage']/a"); foreach($postThumbLinks as $key=>$data_link) < $imgList = $xpath->query("./img", $data_link); if($imgList->length > 0) < $imageLink = $imgList->item(0)->getAttribute('src'); > echo $data_link->getAttribute('href'), " - ", $data_link->getAttribute('title')," - ", $imageLink, "
", PHP_EOL; echo ""; echo $data_link->getAttribute('href'), PHP_EOL; echo ""; $url = $data_link->getAttribute('href'); $img = 'Iimages/'.$u_id.'.png'; $file = file($url); $result = file_put_contents($img, $file); >
I hope you have Got What is php – Get Element by ClassName with DOMdocument() Method And how it works.I would Like to have FeadBack From My Blog(Pakainfo.com) readers.Your Valuable FeadBack,Any Question,or any Comments abaout This Article(Pakainfo.com) Are Most Always Welcome.
Related posts:
Получение элементов DOM по имени класса
Я использую PHP DOM и пытаюсь получить элемент в узле DOM, который имеет заданное имя класса. Какой лучший способ получить этот подэлемент?
Ответ 1
Итак, PHP будет таким:
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname=»my-class»;
$nodes = $finder->query(«//*[contains(concat(‘ ‘, normalize-space(@class), ‘ ‘), ‘ $classname ‘)]»);
По сути, все, что мы здесь делаем, — это нормализуем атрибут class так, чтобы даже один класс был ограничен пробелами, а полный список классов был ограничен пробелами. Затем добавляем к искомому классу пробел. Таким образом, мы эффективно ищем и находим только экземпляры my-class. Использовать селектор xpath?
$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname=»my-class»;
$nodes = $finder->query(«//*[contains(@class, ‘$classname’)]»);
Если это только один тип элемента, вы можете заменить «*» на конкретное название.
Если вам нужно сделать много подобных действий с очень сложными селекторами, я бы рекомендовал Zend_Dom_Query, который поддерживает синтаксис CSS-селекторов (то есть jQuery):
$finder = new Zend_Dom_Query($html);
$classname = ‘my-class’;
$nodes = $finder->query(«*[class~=\»$classname\»]»);
Ответ 2
Если вы хотите получить innerhtml класса без zend, вы можете использовать это:
$dom = new DomDocument();
$dom->load($filePath);
$classname = ‘main-article’;
$finder = new DomXPath($dom);
$nodes = $finder->query(«//*[contains(concat(‘ ‘, normalize-space(@class), ‘ ‘), ‘ $classname ‘)]»);
$tmp_dom = new DOMDocument();
foreach ($nodes as $node)
$tmp_dom->appendChild($tmp_dom->importNode($node,true));
>
$innerHTML.=trim($tmp_dom->saveHTML());
echo $innerHTML;
Ответ 3
Я думаю, что принятый способ лучше, но мне кажется , что это тоже может сработать:
function getElementByClass(&$parentNode, $tagName, $className, $offset = 0)
$response = false;
$childNodeList = $parentNode->getElementsByTagName($tagName);
$tagCount = 0;
for ($i = 0; $i < $childNodeList->length; $i++)
$temp = $childNodeList->item($i);
if (stripos($temp->getAttribute(‘class’), $className) !== false)
if ($tagCount == $offset)
$response = $temp;
break;
>
$tagCount++;
>
>
return $response;
>
Ответ 4
Существует также другой подход, не требующий использования DomXPath или Zend_Dom_Query. Основываясь на оригинальной функции dav, я написал следующую функцию, которая возвращает все дочерние узлы родительского узла, чьи тег и класс соответствуют заданным параметрам.
function getElementsByClass(&$parentNode, $tagName, $className)
$nodes=array();
$childNodeList = $parentNode->getElementsByTagName($tagName);
for ($i = 0; $i < $childNodeList->length; $i++)
$temp = $childNodeList->item($i);
if (stripos($temp->getAttribute(‘class’), $className) !== false)
$nodes[]=$temp;
>
>
return $nodes;
>
Предположим, что у вас есть переменная $html, содержащая следующий HTML:
Я нахожусь в узле содержимого.
Я нахожусь в узле содержимого.
Я нахожусь в узле содержимого.
Я нахожусь в узле нижнего колонтитула.
Использовать getElementsByClass очень просто:
$dom = new DOMDocument(‘1.0’, ‘utf-8’);
$dom->loadHTML($html);
$content_node=$dom->getElementById(«content_node»);
$div_a_class_nodes=getElementsByClass($content_node, ‘div’, ‘a’); //будет содержать три узла под «content_node».
Ответ 5
Нативная обработка DOM в PHP настолько абсурдно плоха, что сделайте себе одолжение и используйте этот или любой другой современный пакет для разбора HTML, который может справиться с этим в несколько строк , — у становите paquettg/php-html-parser с помощью:
composer require paquettg/php-html-parser
Затем создайте файл .php в той же папке с таким содержанием:
// загружаем зависимости через Composer
require __DIR__ . ‘/vendor/autoload.php’;
use PHPHtmlParser\Dom;
$dom = new Dom;
$dom->loadFromUrl(«https://example.com»);
$links = $dom->find(‘.classname a’);
foreach ($links as $link)
echo $link->getAttribute(‘href’);
>
Информацию о том, как установить Composer, вы найдете на домашней странице Composer.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Using PHP DOM document, to select HTML element by its class and get its text
I trying to get text from div where by using PHP’s DOM element with following HTML (same structure) and following code.
However this doesn’t seem to work
$html = '
'; Outstanding .$classname = 'review-text'; $dom = new DOMDocument; $dom->loadHTML($html); $xpath = new DOMXPath($dom); $results = $xpath->query("//*[@class and contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]"); if ($results->length > 0) < echo $review = $results->item(0)->nodeValue; >
The XPATH syntax to select element by Class is provided at this Blog
I have tried many example from StackOverflow, online tutorials, but none seems to work. Am I missing something ?
Answer
Solution:
The following XPath query does what you want. Just replace the argument provided to $xpath->query with the following:
//div[@class="review-text"]
Edit: For easy development, you can test your own XPath query’s online at http://www.xpathtester.com/test.
Edit2: Tested this code; it worked perfectly.
Outstanding .