El componente CssSelector convierte selectores CSS a expresiones XPath.
Puedes instalar el componente de varias maneras diferentes:
Cuando estás analizando un archivo HTML o un documento XML, con mucho, el método más poderoso es XPath.
Las expresiones XPath son increíblemente flexibles, por lo tanto casi siempre hay una expresión XPath que encuentra el elemento que necesitas. Desafortunadamente, también puede llegar a ser muy complicado, y la curva de aprendizaje es muy empinada. Incluso operaciones comunes (por ejemplo, la búsqueda de un elemento con una clase en particular) puede requerir expresiones largas y difíciles de manejar.
Muchos desarrolladores —particularmente los desarrolladores web— se sienten más cómodos usando selectores CSS para encontrar elementos. Además de trabajar en hojas de estilo, los selectores CSS se utilizan en Javascript con la función querySelectorAll y en las bibliotecas populares de Javascript como jQuery, Prototype y MooTools.
Los selectores CSS son menos poderosos que XPath, pero mucho más fáciles de escribir, leer y entender. Debido a que son menos poderosos, casi todos los selectores CSS se pueden convertir a una expresión XPath equivalente. Entonces, puedes utilizar esta expresión XPath con otras funciones y clases que utilizan XPath para buscar elementos en un documento.
El único objetivo del componente es el de convertir selectores CSS a su XPath equivalente:
use Symfony\Component\CssSelector\CssSelector;
print CssSelector::toXPath('div.item > h4 > a');
Esto produce el siguiente resultado:
descendant-or-self::div[contains(concat(' ',normalize-space(@class), ' '), ' item ')]/h4/a
Puedes utilizar esta expresión con, por ejemplo, DOMXPath o SimpleXMLElement para encontrar elementos en un documento.
Truco
El método Crawler::filter() utiliza el componente CssSelector para encontrar elementos basándose en una cadena selectora CSS. Ve El componente DomCrawler para más detalles.
No todos los selectores CSS se pueden convertir a XPath equivalentes.
Hay varios selectores CSS que sólo tienen sentido en el contexto de un navegador web.
Seudoelementos (:before, :after, :first-line, :first-letter) no son compatibles, debido a que seleccionan porciones de texto en lugar de elementos.
Algunas seudoclases todavía no cuentan con soporte: