Seletores CSS em PHP
Aprenda como consultar documentos usando seletores semelhantes a CSS com Inphinit\Dom\Document e DOMDocument.
Utilizando seletores
É possível selecionar elementos em um documento externo, por exemplo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sample</title>
</head>
<body>
<div>Foo</div>
<div>Bar</div>
<div id="test">test</div>
<div>Baz</div>
</body>
</html>
Por exemplo, o seletor body > div tem como alvo <div> elementos que são filhos diretos do <body> elemento:
use Inphinit\Dom\Document;
$handle = new Document(Document::HTML);
$handle->load('document.html');
$elements = $handle->selector()->all('body > div');
var_dump($elements);
Selecionando um elemento por ID:
$element = $handle->selector()->first('#test');
var_dump($element);
Utilizando com DOMDocument
Também é possivel usar os seletores com uma instancia da classe nativa do PHP DOMDocument, exemplo:
use Inphinit\Dom\Selector;
$doc = new DOMDocument;
$doc->load('examples/book.xml');
$selector = new Selector($doc);
// Get the first element that matches the selector
$element = $selector->first('ul li');
var_dump($element);
// Returns a DOMNodeList of elements that match the selector
$elements = $selector->all('ul li');
forrach ($elements as $element) {
var_dump($element);
}
Métodos
| Método | Descrição |
|---|---|
all(string $selector): DOMNodeList |
Retorna todos os elementos que correspondem ao seletor. |
first(string $selector): DOMNode|null |
Retorna o primeiro elemento que corresponde ao seletor ou, null se nenhum elemento for encontrado, retorna o valor especificado. |
count(string $selector): int |
Retorna o número total de elementos que correspondem ao seletor. |
Seletores suportados
| Seletor | Descrição | Observação |
|---|---|---|
* |
Qualquer elemento (seletor universal) | - |
E |
Um elemento do tipo E |
- |
E.warning |
Um E elemento cuja classe é warning (seletor de classe) |
- |
E#myid |
Um E elemento com ID igual a myid (seletor de ID) |
- |
E F |
Um F elemento descendente de outro E elemento (combinador descendente) |
- |
E > F |
Um F elemento filho de outro E elemento (combinador filho) |
- |
E + F |
Um F elemento imediatamente precedido por um E elemento |
- |
E ~ F |
Um F elemento precedido por um E elemento |
- |
E[foo] |
Um E elemento com um foo atributo |
- |
E[foo="bar"] |
Um E elemento cujo foo valor de atributo é exatamente igual a bar |
- |
E[foo="bar" i] |
Para corresponder valores de atributos sem distinção entre maiúsculas e minúsculas, o seletor de atributos pode incluir o identificador i antes do colchete de fechamento.] |
Também suporte por ^=, $=, *= e |= |
E[foo~="bar"] |
Um E elemento cujo foo valor de atributo é uma lista de valores separados por espaços em branco, sendo que um deles é exatamente igual a bar |
- |
E[foo^="bar"] |
Um E elemento cujo foo valor de atributo começa exatamente com a string bar |
- |
E[foo$="bar"] |
Um E elemento cujo foo valor de atributo termina exatamente com a string bar |
- |
E[foo*="bar"] |
Um E elemento cujo foo valor de atributo contém a substring bar |
- |
E[foo|="en"] |
Um E elemento cujo foo atributo possui uma lista de valores separados por hífen, começando (da esquerda) com "en". |
- |
E:empty |
Um E elemento que não possui filhos (incluindo nós de texto) |
- |
E:lang(fr) |
Um elemento de tipo E na linguagem fr |
- |
E:first-child |
Um E elemento, primeiro filho de seu pai. |
- |
E:last-child |
Um E elemento, último filho de seu pai. |
- |
E:nth-child(n) |
Um E elemento, o n-ésimo filho de seu pai. |
Apenas algumas combinações são suportadas, como:
:nth-child(<a>n+<b>),
:nth-child(<a>n),
:nth-child(<a>),
:nth-child(even),
:nth-child(odd) (<a> e <b> representam números nas formulas)
|
E:contains(bar) |
Um E elemento cujo conteúdo contém a substring bar |
não padrão |
E:contains-child(bar) |
Um E elemento cujo conteúdo contém a substring bar apenas em nodeTexts que são filhos diretos. |
não padrão |