You are here

class XPathExpr in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/css-selector/XPath/XPathExpr.php \Symfony\Component\CssSelector\XPath\XPathExpr

XPath expression translator interface.

This component is a port of the Python cssselect library, which is copyright Ian Bicking, @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>

Hierarchy

  • class \Symfony\Component\CssSelector\XPath\XPathExpr

Expanded class hierarchy of XPathExpr

See also

https://github.com/SimonSapin/cssselect.

6 files declare their use of XPathExpr
AttributeMatchingExtension.php in vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
CombinationExtension.php in vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
FunctionExtension.php in vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
HtmlExtension.php in vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
NodeExtension.php in vendor/symfony/css-selector/XPath/Extension/NodeExtension.php

... See full list

File

vendor/symfony/css-selector/XPath/XPathExpr.php, line 22

Namespace

Symfony\Component\CssSelector\XPath
View source
class XPathExpr {

  /**
   * @var string
   */
  private $path;

  /**
   * @var string
   */
  private $element;

  /**
   * @var string
   */
  private $condition;

  /**
   * @param string $path
   * @param string $element
   * @param string $condition
   * @param bool   $starPrefix
   */
  public function __construct($path = '', $element = '*', $condition = '', $starPrefix = false) {
    $this->path = $path;
    $this->element = $element;
    $this->condition = $condition;
    if ($starPrefix) {
      $this
        ->addStarPrefix();
    }
  }

  /**
   * @return string
   */
  public function getElement() {
    return $this->element;
  }

  /**
   * @param $condition
   *
   * @return XPathExpr
   */
  public function addCondition($condition) {
    $this->condition = $this->condition ? sprintf('%s and (%s)', $this->condition, $condition) : $condition;
    return $this;
  }

  /**
   * @return string
   */
  public function getCondition() {
    return $this->condition;
  }

  /**
   * @return XPathExpr
   */
  public function addNameTest() {
    if ('*' !== $this->element) {
      $this
        ->addCondition('name() = ' . Translator::getXpathLiteral($this->element));
      $this->element = '*';
    }
    return $this;
  }

  /**
   * @return XPathExpr
   */
  public function addStarPrefix() {
    $this->path .= '*/';
    return $this;
  }

  /**
   * Joins another XPathExpr with a combiner.
   *
   * @param string    $combiner
   * @param XPathExpr $expr
   *
   * @return XPathExpr
   */
  public function join($combiner, XPathExpr $expr) {
    $path = $this
      ->__toString() . $combiner;
    if ('*/' !== $expr->path) {
      $path .= $expr->path;
    }
    $this->path = $path;
    $this->element = $expr->element;
    $this->condition = $expr->condition;
    return $this;
  }

  /**
   * @return string
   */
  public function __toString() {
    $path = $this->path . $this->element;
    $condition = null === $this->condition || '' === $this->condition ? '' : '[' . $this->condition . ']';
    return $path . $condition;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
XPathExpr::$condition private property
XPathExpr::$element private property
XPathExpr::$path private property
XPathExpr::addCondition public function
XPathExpr::addNameTest public function
XPathExpr::addStarPrefix public function
XPathExpr::getCondition public function
XPathExpr::getElement public function
XPathExpr::join public function Joins another XPathExpr with a combiner.
XPathExpr::__construct public function
XPathExpr::__toString public function