PHP code example of ryangittings / didom

1. Go to this page and download the library: Download ryangittings/didom library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ryangittings / didom example snippets


use DiDom\Document;

$document = new Document('http://www.news.com/', true);

$posts = $document->find('.post');

foreach($posts as $post) {
    echo $post->text(), "\n";
}

// the first parameter is a string with HTML
$document = new Document($html);

// or URL
$document = new Document('http://www.example.com/', true);

$document = new Document();

$document->loadHtml($html);

$document->loadHtmlFile('http://www.example.com/');

$document->loadHtml($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

use DiDom\Document;
use DiDom\Query;

...

// CSS selector
$posts = $document->find('.post');

// XPath
$posts = $document->find("//div[contains(@class, 'post')]", Query::TYPE_XPATH);

$posts = $document('.post');

$posts = $document->xpath("//*[contains(concat(' ', normalize-space(@class), ' '), ' post ')]");

echo $document->find('nav')[0]->first('ul.menu')->xpath('//li')[0]->text();

if ($document->has('.post')) {
    // code
}

if ($document->has('.post')) {
    $elements = $document->find('.post');
    // code
}

if (count($elements = $document->find('.post')) > 0) {
    // code
}

// all links
$document->find('a');

// any element with id = "foo" and "bar" class
$document->find('#foo.bar');

// any element with attribute "name"
$document->find('[name]');
// the same as
$document->find('*[name]');

// input field with the name "foo"
$document->find('input[name=foo]');
$document->find('input[name=\'bar\']');
$document->find('input[name="baz"]');

// any element that has an attribute starting with "data-" and the value "foo"
$document->find('*[^data-=foo]');

// all links starting with https
$document->find('a[href^=https]');

// all images with the extension png
$document->find('img[src$=png]');

// all links containing the string "example.com"
$document->find('a[href*=example.com]');

// text of the links with "foo" class
$document->find('a.foo::text');

// address and title of all the fields with "bar" class
$document->find('a.bar::attr(href|title)');

$posts = $document->find('.post');

echo $posts[0]->html();

$html = (string) $posts[0];

$html = $document->format()->html();

$html = $element->toDocument()->format()->html();

$innerHtml = $element->innerHtml();

$innerHtml = $document->toElement()->innerHtml();

echo $document->xml();

echo $document->first('book')->xml();

$posts = $document->find('.post');

echo $posts[0]->text();

use DiDom\Element;

$element = new Element('span', 'Hello');

// Outputs "<span>Hello</span>"
echo $element->html();

$attributes = ['name' => 'description', 'placeholder' => 'Enter description of item'];

$element = new Element('textarea', 'Text', $attributes);

use DiDom\Element;
use DOMElement;

$domElement = new DOMElement('span', 'Hello');

$element = new Element($domElement);

$document = new Document($html);

$element = $document->createElement('span', 'Hello');

$element->tag;

$document = new Document($html);

$input = $document->find('input[name=email]')[0];

var_dump($input->parent());

$document = new Document($html);

$item = $document->find('ul.menu > li')[1];

var_dump($item->previousSibling());

var_dump($item->nextSibling());

$html = '<div>Foo<span>Bar</span><!--Baz--></div>';

$document = new Document($html);

$div = $document->first('div');

// element node (DOMElement)
// string(3) "Bar"
var_dump($div->child(1)->text());

// text node (DOMText)
// string(3) "Foo"
var_dump($div->firstChild()->text());

// comment node (DOMComment)
// string(3) "Baz"
var_dump($div->lastChild()->text());

// array(3) { ... }
var_dump($div->children());

$document = new Document($html);

$element = $document->find('input[name=email]')[0];

$document2 = $element->getDocument();

// bool(true)
var_dump($document->is($document2));

$element->setAttribute('name', 'username');

$element->attr('name', 'username');

$element->name = 'username';

$username = $element->getAttribute('value');

$username = $element->attr('value');

$username = $element->name;

if ($element->hasAttribute('name')) {
    // code
}

if (isset($element->name)) {
    // code
}

$element->removeAttribute('name');

unset($element->name);

$element  = new Element('span', 'hello');
$element2 = new Element('span', 'hello');

// bool(true)
var_dump($element->is($element));

// bool(false)
var_dump($element->is($element2));

$list = new Element('ul');

$item = new Element('li', 'Item 1');

$list->appendChild($item);

$items = [
    new Element('li', 'Item 2'),
    new Element('li', 'Item 3'),
];

$list->appendChild($items);

$list = new Element('ul');

$item = new Element('li', 'Item 1');
$items = [
    new Element('li', 'Item 2'),
    new Element('li', 'Item 3'),
];

$list->appendChild($item);
$list->appendChild($items);

$element = new Element('span', 'hello');

$document->find('.post')[0]->replace($element);

$document->find('.post')[0]->remove();

use DiDom\Query;

...

$xpath    = Query::compile('h2');
$compiled = Query::getCompiled();

// array('h2' => '//h2')
var_dump($compiled);

Query::setCompiled(['h2' => '//h2']);

$document = new Document();

$document->preserveWhiteSpace();

$document->loadXml($xml);

// prints the number of links in the document
echo $document->count('a');

// prints the number of items in the list
echo $document->first('ul')->count('li');

$element->matches('div#content');

// strict match
// returns true if the element is a div with id equals content and nothing else
// if the element has any other attributes the method returns false
$element->matches('div#content', true);

$element->isElementNode();

$element->isTextNode();

$element->isCommentNode();