soloproyectos-php / css-parser
A library for managing CSS expressions. This library is part of the SoloProyectos PHP API.
This package's canonical repository appears to be gone and the package has been frozen as a result.
Installs: 740
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Type:php-library
Requires
- php: >=5.5.0
- soloproyectos-php/array: ~1.0
- soloproyectos-php/css: ~1.0
- soloproyectos-php/dom: ~2.0
- soloproyectos-php/text-parser: ~1.0
This package is not auto-updated.
Last update: 2024-05-11 14:19:36 UTC
README
A library to evaluate CSS expressions.
This library can be used to select elements from a DOM Document using CSS selectors.
Install
Simply execute the following command:
composer require soloproyectos-php/css-parser
Examples
You can create instances of CssParser
from different sources:
// Loads a DOMDocument $doc = new DOMDocument("1.0", "UTF-8"); $doc->loadXML('<root><item id="101" /><item id="102" /></root>'); $selector = new CssParser($doc); // Loads a DOMElement $doc = new DOMDocument("1.0", "UTF-8"); $doc->loadXML('<root><item id="101" /><item id="102" /></root>); $root = $doc->documentElement; $selector = new CssParser($root); // Loads a file $selector = new CssParser('/path/to/my/document.xml'); // Loads an URL $selector = new CssParser('http://www.my-site.com/document.xml');
Selects the first and the odd elements:
$doc = new DOMDocument("1.0", "UTF-8"); $doc->loadXML( '<root><item id="101" /><item id="102" /></root>' ); $selector = new CssSelector($doc); // selects the first and the odd elements and prints them $items = $selector->query('item:odd, item:first-child'); foreach ($items as $item) { echo $doc->saveXML($item) . "\n"; }
This library supports a wide variety of CSS Pseudo-filters such as :odd
, :even
, first-child
, etc. But you can create customs ones. The following example declares a fibonacci
pseudo-filter:
// is the position of the node a Fibonacci number? $css->registerPseudoFilter("fibonacci", function ($node, $input, $position, $items) { $isFibonacci = false; if ($position > 0) { $n = sqrt(5 * pow($position, 2) + 4); $isFibonacci = $n - floor($n) == 0; if (!$isFibonacci) { $n = sqrt(5 * pow($position, 2) - 4); $isFibonacci = $n - floor($n) == 0; } } return $isFibonacci; }); // selects only `fibonacci` nodes $items = $selector->query('item:fibonacci');
You will find more examples in the source code itself:
src/css/parser/CssParser.php
Enjoy it!