bdk/css-xpath

Search html via CSS selector or convert css selector to xpath

v1.0 2018-02-01 04:02 UTC

README

  • Convert CSS selector to XPath
  • Query HTML string (or \DOMDocument) by CSS selector
  • Provide PHPUnit Assertions (once provided by PHPUnit)

No Dependencies Build Status

Installation

composer require bdk/css-xpath

Usage

CSS to XPath

\bdk\CssXpath\CssXpath::cssToXpath('ul > li:first-child');	// returns '//ul/li[1]'

Query DOM/HTML

Example:

$html = <<<HTML
<div id="article" class="block large">
  <h2>Article Name</h2>
  <p>Contents of article</p>
  <ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li><a href="#">Five</a></li>
  </ul>
</div>
HTML;

// use static method
var_dump(\bdk\CssXpath\CssSelect::select($html, 'ul > li:last-child [href]'));

// or create and use an instance
$cssSelect = new \bdk\CssXpath\CssSelect($html);
$found = $cssSelect->select('ul > li:last-child [href]');

Output:

array (size=1)
  0 =>
    array (size=3)
      'name' => string 'a' (length=1)
      'attributes' =>
        array (size=1)
          'href' => string '#' (length=1)
      'innerHTML' => string 'Five' (length=4)

Pass a last argument of true, to return a \DOMNodeList object instead of an array

PHPUnit

bdk\CssXpath\DOMTestCase extends \PHPUnit\Framework\TestCase and provids 3 assertions:

  • assertSelectCount($selector, $count, $actual, $message = '')
  • assertSelectRegExp($selector, $pattern, $count, $actual, $message = '')
  • assertSelectEquals($selector, $content, $count, $actual, $message = '')

These assertions were originally provided with PHPUnit 3.3, but removed with PHPUnit 5.0