XPath

1. ¿Qué es XPath

XPath (XML Path Language) es un lenguaje de rutas para XML. Su finalidad:
Mediante expresiones de ruta, consulta nodos, textos y atributos de nodo dentro de documentos XML/HTML, además soporta el filtrado por condiciones.

Punto importante: HtmlAgilityPack transforma documentos HTML en un DOM similar al XML, así que puedes usar XPath directamente para extraer contenido de páginas web.

2. Ejemplo de XML de referencia

<?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>Lenguaje del código: HTML, XML (xml)

3. Explicación detallada de la sintaxis XPath

Descripción de los símbolos básicos
SímboloSignificado
/Inicia la búsqueda desde el nodo raíz; separador de niveles de jerarquía
//Busca en cualquier parte del documento, sin limitar los niveles
[]Condiciones de filtro e índices; los índices empiezan en 1 (no en 0)
@Coincide con los atributos de las etiquetas
Análisis caso por caso
  1. /WebInfos
    Obtiene el nodo de nivel superior <WebInfos> partiendo del nodo raíz
  2. /WebInfos/WebInfo[1]
    Recupera el primer nodo <WebInfo> → Datos de FoxDevelop

⚠️ Los índices de XPath comienzan en 1

  1. /WebInfos/WebInfo[Age>5]
    Filtra los nodos WebInfo cuyo nodo hijo <Age> tenga un valor numérico superior a 5
    Resultados coincidentes: google (23), microsoft (13)
  2. /WebInfos/WebInfo[Age>5]/Name
    Sobre el resultado del filtro anterior, extrae los nodos hijos <Name>
  3. /WebInfos/WebInfo[last()]
    Función last(): obtiene el último nodo WebInfo → microsoft
  4. /WebInfos/WebInfo[last()-1]
    Obtiene el penúltimo nodo WebInfo → google
  5. /WebInfos/WebInfo[position()<3]
    position() devuelve el número de orden del nodo actual; coincide con órdenes menores que 3 → los dos primeros registros (FoxDevelop, google)
  6. //IP[@type='ipv4']
    // búsqueda global; filtra nodos <IP> cuyo atributo type sea igual a ipv4
  7. //@type
    Recupera todos los atributos denominados type del documento
  8. //WebInfo
    Búsqueda global de todos los nodos <WebInfo> del documento, sin importar su nivel de anidamiento

4. Sintaxis útiles adicionales

//Name/text()              # Obtener el texto interno de la etiqueta Name
//WebInfo[Name="FoxDevelop"]     # Coincidir nodo según su contenido textual
//IP/@type                 # Leer el valor del atributo type de la etiqueta IPLenguaje del código: JSON / JSON con comentarios (json)

5. Uso dentro de HtmlAgilityPack

var doc = new HtmlDocument();
doc.Load("demo.xml");

// Selecciona los nombres de sitios con Age>5
var nodes = doc.DocumentNode.SelectNodes(@"/WebInfos/WebInfo[Age>5]/Name");
foreach(var node in nodes)
{
    Console.WriteLine(node.InnerText);
}Lenguaje del código: PHP (php)

XPath

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *