PHPackages                             amsify42/php-domfinder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. amsify42/php-domfinder

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

amsify42/php-domfinder
======================

PHP package for searching document object model efficiently and with more readable way.

1.0(6y ago)61.9k1MITPHPPHP &gt;=7.0.0CI failing

Since Mar 22Pushed 6y ago2 watchersCompare

[ Source](https://github.com/amsify42/php-domfinder)[ Packagist](https://packagist.org/packages/amsify42/php-domfinder)[ RSS](/packages/amsify42-php-domfinder/feed)WikiDiscussions master Synced 2w ago

READMEChangelogDependencies (3)Versions (2)Used By (0)

PHP DOM Finder
--------------

[](#php-dom-finder)

> PHP package for searching document object model efficiently and with more readable way.

### Installation

[](#installation)

```
$ composer require amsify42/php-domfinder

```

Table of Contents
-----------------

[](#table-of-contents)

1. [Loading Source](#1-loading-source)
2. [Important Notes](#2-important-notes)
3. [Meta Tags](#3-meta-tags)
4. [Elements](#4-elements)
5. [Element Class](#5-element-class)
6. [Element Id](#6-element-id)
7. [Element Attribute](#7-element-attribute)
8. [Regex Extraction](#8-regex-extraction)
9. [Element Methods](#9-element-methods)
10. [Multi Level Finder](#10-multi-level-finder)

### 1. Loading Source

[](#1-loading-source)

---

#### File

[](#file)

```
$domFinder 	= new Amsify42\DOMFinder\DOMFinder('path/to/file.html');
// or
$domFinder 	= new Amsify42\DOMFinder\DOMFinder();
$domFinder->load('path/to/file.html');
```

#### HTML

[](#html)

```
$domFinder 	= new Amsify42\DOMFinder\DOMFinder('path/to/file.html', 'html');
// or
$domFinder 	= new Amsify42\DOMFinder\DOMFinder();
$domFinder->loadHTML('path/to/file.html');
```

#### XML

[](#xml)

```
$domFinder 	= new Amsify42\DOMFinder\DOMFinder('path/to/file.xml', 'xml');
// or
$domFinder 	= new Amsify42\DOMFinder\DOMFinder();
$domFinder->loadXML('path/to/file.xml');
```

#### URL

[](#url)

For HTML

```
$domFinder 	= new Amsify42\DOMFinder\DOMFinder('http://www.site.com/file.html', 'html', true);
// or
$domFinder 	= new Amsify42\DOMFinder\DOMFinder();
$domFinder->loadHTML('http://www.site.com/file.html', true);
```

For XML

```
$domFinder 	= new Amsify42\DOMFinder\DOMFinder('http://www.site.com/file.xml', 'xml', true);
// or
$domFinder 	= new Amsify42\DOMFinder\DOMFinder();
$domFinder->loadXML('http://www.site.com/file.xml', true);
```

#### Using helper method

[](#using-helper-method)

```
$domFinder = get_dom_finder('http://www.site.com/file.html', 'html', true);
```

**Note:** Make sure you pass `true` as 3rd parameter to constructor/helper method or 2nd parameter to load method for loading content from URL.

### 2. Important Notes

[](#2-important-notes)

---

#### 1. [DOMDocument](https://www.php.net/manual/en/class.domdocument.php)

[](#1-domdocument)

`Amsify42\DOMFinder\DOMFinder` class uses `Amsify42\DOMFinder\DOM\Document` which extends PHP pre defined class [DOMDocument](https://www.php.net/manual/en/class.domdocument.php). You can use all the methods of `DOMDocument` using this instance

```
$domFinder->dom();
```

Example:

```
$domFinder->dom()->getElementsByTagName('p');
```

#### 2. [DomXPath](https://www.php.net/manual/en/class.domxpath.php)

[](#2-domxpath)

`Amsify42\DOMFinder\DOMFinder` class uses PHP pre defined class `DomXPath` for querying document. If you want to use all the methods of [DomXPath](https://www.php.net/manual/en/class.domxpath.php), you can use this instance

```
$domFinder->finder();
```

Example:

```
$domFinder->finder()->query("/div[@class='body-entry']");
```

#### 3. [DOMElement](https://www.php.net/manual/en/class.domelement.php)

[](#3-domelement)

All the element results you get after querying document will be of type `Amsify42\DOMFinder\DOM\Element` which extends PHP pre defined class [DOMElement](https://www.php.net/manual/en/class.domelement.php).

```
$anchors = $domFinder->find('a')->byClass('action-link')->all();
if($anchors->length)
{
	foreach($anchors as $anchor)
	{
		var_dump($anchor); // Will be of type Amsify42\DOMFinder\DOM\Element which extends DOMElement
	}
}
```

You can use all the methods of `DOMElement` from all the element items. Example:

```
foreach($anchors as $anchor)
{
	$anchor->getAttribute('href');
}
```

Most importantly, whenever you try to get the first or particular key element by index, it will either return `NULL` or element of type `Amsify42\DOMFinder\DOM\Element`. Examples:

```
$para = $domFinder->getFirstElement('p');
// or
$para = $domFinder->getElement('p', 1);
// or
$para = $domFinder->findFirst('p');
// or
$para = $domFinder->find('p')->first();
// or
$para = $domFinder->find('p')->get(1);
```

### 3. Meta Tags

[](#3-meta-tags)

---

After source has been loaded, you can use these meta tags related methods.

```
$metaTags = $domFinder->metaTags();
```

To get specific meta tag value

```

```

```
$title = $domFinder->getMetaValue('name', 'title');
```

By default it takes **content** attribute value from meta element, to get value from other attribute, pass 3rd parameter

```

```

```
$title = $domFinder->getMetaValue('name', 'title', 'myattr');
```

### 4. Elements

[](#4-elements)

---

To get specific elements from DOM

```
$paras = $domFinder->getElements('p');
```

To get first element

```
$para = $domFinder->getFirstElement('p');
```

To get the element by index position

```
$para = $domFinder->getElement('p', 1);
```

### 5. Element Class

[](#5-element-class)

---

#### Equals

[](#equals)

Find all elements by class name

```
$elements = $domFinder->findByClass('section-items')->all();
```

Find first element by class

```
$element = $domFinder->findByClass('section-items')->first();
// or
$element = $domFinder->findFirstByClass('section-items');
```

Find all div tag element by class

```
$elements = $domFinder->find('div')->byClass('section-items')->all();
```

Find first div tag element by class

```
$element = $domFinder->find('div')->byClass('section-items')->first();
```

For getting element by its key position

```
$element = $domFinder->find('div')->byClass('section-items')->get(1); // This will return 2nd element
```

#### Like

[](#like)

Find all elements contains class

```
$elements = $domFinder->findClassLike('section-items')->all();
```

Find first element contains class

```
$element = $domFinder->findClassLike('section-items')->first();
// or
$element = $domFinder->findFirstClassLike('section-items');
```

Find all div tag element contains class

```
$divs = $domFinder->find('div')->classLike('section-items')->all();
```

Find first div tag element contains class

```
$div = $domFinder->find('div')->classLike('section-items')->first();
```

For getting element by its key position

```
$div = $domFinder->find('div')->classLike('section-items')->get(1); // This will return 2nd element
```

### 6. Element Id

[](#6-element-id)

---

#### Equals

[](#equals-1)

Find all elements by id

```
$elements = $domFinder->findById('body-entry')->all();
```

Find first element by id

```
$element = $domFinder->findById('body-entry')->first();
// or
$element = $domFinder->findFirstById('body-entry');
```

Find all div tag element by id

```
$divs = $domFinder->find('div')->byId('body-entry')->all();
```

Find first div tag element by id

```
$div = $domFinder->find('div')->byId('body-entry')->first();
```

#### Like

[](#like-1)

Find all elements contains id

```
$elements = $domFinder->findIdLike('section-')->all();
```

Find first element contains id

```
$element = $domFinder->findIdLike('section-')->first();
// or
$element = $domFinder->findFirstIdLike('section-');
```

Find all div tag element contains id

```
$divs = $domFinder->find('div')->idLike('section-')->all();
```

Find first div tag element contains id

```
$div = $domFinder->find('div')->idLike('section-')->first();
```

For getting element by its key position

```
$div = $domFinder->find('div')->idLike('section-')->get(1); // This will return 2nd element
```

### 7. Element Attribute

[](#7-element-attribute)

---

#### Equals

[](#equals-2)

Find all elements by attribute

```
$elements = $domFinder->findByAttr('data-section', 'paragraph')->all();
```

Find first element by attribute

```
$element = $domFinder->findByAttr('data-section', 'paragraph')->first();
// or
$element = $domFinder->findFirstByAttr('data-section', 'paragraph');
```

Find all div tag element by attribute

```
$divs = $domFinder->find('div')->byAttr('data-section', 'paragraph')->all();
```

Find first div tag element by attribute

```
$div = $domFinder->find('div')->byAttr('data-section', 'paragraph')->first();
```

For getting element by its key position

```
$div = $domFinder->find('div')->byAttr('data-section', 'paragraph')->get(1); // This will return 2nd element
```

#### Like

[](#like-2)

Find all elements contains attribute

```
$elements = $domFinder->findAttrLike('my-att', 'some-')->all();
```

Find first element contains attribute

```
$element = $domFinder->findAttrLike('my-att', 'some-')->first();
// or
$element = $domFinder->findFirstAttrLike('my-att', 'some-');
```

Find all div tag element contains attribute

```
$divs = $domFinder->find('div')->attrLike('my-att', 'some-')->all();
```

Find first div tag element contains attribute

```
$div = $domFinder->find('div')->attrLike'my-att', 'some-')->first();
```

For getting element by its key position

```
$div = $domFinder->find('div')->attrLike('my-att', 'some-')->get(1); // This will return 2nd element
```

### 8. Regex Extraction

[](#8-regex-extraction)

---

To extract particular item from html, consider this sample html

```
$html = '
			var data={"name": "my name", "id":12345};
		';
$domFinder = new Amsify42\DOMFinder\DOMFinder();
$domFinder->loadHTML($html);

$section = $domFinder->findFirstByClass('section');
if($section)
{
	$data = $section->extractByRegex("/data\=(.*?)\;(.*?)\(.*?)\
