Php domdocument find by class

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!.

Читайте также:  Box Model Tutorial

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.

Источник

Получение элементов 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 .
'; $classname = 'review-text'; $dom = new DOMDocument; $dom->loadHTML($html); $xpath = new DOMXPath($dom); $results = $xpath->query("//*[@class='" . $classname . "']"); if ($results->length > 0) < echo $review = $results->item(0)->nodeValue; > ?>

Answer

Solution:

Expanding on Frak Houweling answer, it is also possible to use DomXpath to search within a specific DomNode. This can be acheived by passing the contextNode as a second argument to DomXpath->query method:

$dom = new DOMDocument; $dom->loadHTML ($html); $xpath = new DOMXPath ($dom); foreach ($xpath->query ("//section[@class='page single-review']") as $section) < // search for sub nodes inside each element foreach ($xpath->query (".//div[@class='review-text']", $section) as $review) < echo $review->nodeValue; > > 

Note that when searching inside nodes you need to use relative paths by adding a dot . at the beginning of the expression:

"//div[@class='review-text']" // absolute path, search starts from the root element ".//div[@class='review-text']" // relative path, search starts from the provided contextNode 

Share solution ↓

Additional Information:

Didn’t find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Similar questions

Find the answer in similar questions on our website.

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

About the technologies asked in this question

PHP

PHP (from the English Hypertext Preprocessor — hypertext preprocessor) is a scripting programming language for developing web applications. Supported by most hosting providers, it is one of the most popular tools for creating dynamic websites. The PHP scripting language has gained wide popularity due to its processing speed, simplicity, cross-platform, functionality and distribution of source codes under its own license.
https://www.php.net/

HTML

HTML (English «hyper text markup language» — hypertext markup language) is a special markup language that is used to create sites on the Internet. Browsers understand html perfectly and can interpret it in an understandable way. In general, any page on the site is html-code, which the browser translates into a user-friendly form. By the way, the code of any page is available to everyone.
https://www.w3.org/html/

Welcome to programmierfrage.com

programmierfrage.com is a question and answer site for professional web developers, programming enthusiasts and website builders. Site created and operated by the community. Together with you, we create a free library of detailed answers to any question on programming, web development, website creation and website administration.

Get answers to specific questions

Ask about the real problem you are facing. Describe in detail what you are doing and what you want to achieve.

Help Others Solve Their Issues

Our goal is to create a strong community in which everyone will support each other. If you find a question and know the answer to it, help others with your knowledge.

Источник

Оцените статью