public static function cssToXpath($cssExpr, $prefix = 'descendant-or-self::')
{
if (is_string($cssExpr)) {
if (preg_match('#^\\w+\\s*$#u', $cssExpr, $match)) {
return $prefix . trim($match[0]);
}
if (preg_match('~^(\\w*)#(\\w+)\\s*$~u', $cssExpr, $match)) {
return sprintf("%s%s[@id = '%s']", $prefix, $match[1] ? $match[1] : '*', $match[2]);
}
if (preg_match('#^(\\w*)\\.(\\w+)\\s*$#u', $cssExpr, $match)) {
return sprintf("%s%s[contains(concat(' ', normalize-space(@class), ' '), ' %s ')]", $prefix, $match[1] ? $match[1] : '*', $match[2]);
}
$parser = new self();
$cssExpr = $parser->parse($cssExpr);
}
$expr = $cssExpr->toXpath();
// @codeCoverageIgnoreStart
if (!$expr) {
throw new SyntaxError(sprintf('Got None for xpath expression from %s.', $cssExpr));
}
// @codeCoverageIgnoreEnd
if ($prefix) {
$expr->addPrefix($prefix);
}
return (string) $expr;
}