XPath

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ímboloSignificado
/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
  1. /WebInfos
    Obtém o nó de nível superior <WebInfos> partindo do nó raiz
  2. /WebInfos/WebInfo[1]
    Recupera o primeiro<WebInfo> → Dados do FoxDevelop

⚠️ Os índices do XPath começam no número 1

  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)
  2. /WebInfos/WebInfo[Age>5]/Name
    Com base no filtro anterior, extrai os nós filhos <Name>
  3. /WebInfos/WebInfo[last()]
    Função last(): retorna o último nó WebInfo → microsoft
  4. /WebInfos/WebInfo[last()-1]
    Retorna o penúltimo nó WebInfo → google
  5. /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)
  6. //IP[@type='ipv4']
    // busca global; filtra os nós <IP> cujo atributo type seja igual a ipv4
  7. //@type
    Obtém todos os atributos de nome type dentro do documento
  8. //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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *