1. O que é XPath
XPath (XML Path Language) é uma linguagem de caminho para XML. Sua função:
Por meio de expressões de caminho, consulta nós, textos de nós e atributos de nós em documentos XML/HTML, com suporte a filtros condicionais.
Ponto‑chave: o HtmlAgilityPack converte documentos HTML em uma estrutura DOM similar ao XML, então é possível usar o XPath diretamente para extrair conteúdo de páginas web.
2. Exemplo de XML para referência
<?xml version="1.0" encoding="utf-8"?>
<WebInfos>
<WebInfo>
<Name>FoxDevelop</Name>
<Domain>https://foxdevelop.com</Domain>
<IP type="ipv4">127.0.0.1</IP>
<Age>1</Age>
</WebInfo>
<WebInfo>
<Name>google</Name>
<Domain>https://www.google.com</Domain>
<IP type="ipv4">95.0.0.1</IP>
<Age>23</Age>
</WebInfo>
<WebInfo>
<Name>microsoft</Name>
<Domain>https://www.microsoft.com</Domain>
<IP type="ipv4">192.186.0.1</IP>
<Age>13</Age>
</WebInfo>
</WebInfos>Code language: HTML, XML (xml)
3. Explicação detalhada da sintaxe XPath
Explicação dos símbolos básicos
| Símbolo | Significado |
|---|---|
/ | Inicia a busca a partir do nó raiz; separador de níveis hierárquicos |
// | Busca em qualquer local do documento, sem restrição de níveis |
[] | Filtros e índices; índices começam em 1 (não em 0) |
@ | Corresponde aos atributos das tags |
Análise dos exemplos um a um
/WebInfos
Obtém o nó de nível superior<WebInfos>partindo do nó raiz/WebInfos/WebInfo[1]
Recupera o primeiro nó<WebInfo>→ Dados do FoxDevelop
⚠️ Os índices do XPath começam no número 1
/WebInfos/WebInfo[Age>5]
Filtra os nós WebInfo onde o valor do nó filho<Age>é maior que 5
Resultados encontrados: google (23), microsoft (13)/WebInfos/WebInfo[Age>5]/Name
Com base no filtro anterior, extrai os nós filhos<Name>/WebInfos/WebInfo[last()]
Funçãolast(): retorna o último nó WebInfo → microsoft/WebInfos/WebInfo[last()-1]
Retorna o penúltimo nó WebInfo → google/WebInfos/WebInfo[position()<3]position()retorna o número de ordem do nó; retorna nós com ordem menor que 3 → os dois primeiros registros (FoxDevelop, google)//IP[@type='ipv4']//busca global; filtra os nós<IP>cujo atributotypeseja igual aipv4//@type
Obtém todos os atributos de nometypedentro do documento//WebInfo
Busca global por todos os nós<WebInfo>do documento, independente do nível de aninhamento
4. Padrões práticos estendidos
//Name/text() # Captura o texto interno da tag Name
//WebInfo[Name="FoxDevelop"] # Localiza nó pelo seu conteúdo textual
//IP/@type # Lê o valor do atributo type da tag IPCode language: JSON / JSON with Comments (json)
5. Utilização com HtmlAgilityPack
var doc = new HtmlDocument();
doc.Load("demo.xml");
// Seleciona nomes dos sites com Age>5
var nodes = doc.DocumentNode.SelectNodes(@"/WebInfos/WebInfo[Age>5]/Name");
foreach(var node in nodes)
{
Console.WriteLine(node.InnerText);
}Code language: PHP (php)
XPath
Previous: Apresentação
Next: Aplicação