Cómo utilizar XPath – Método Evaluar()

XPath

XPath (XML Path Language) proporciona una forma flexible de señalar diferentes partes de un documento basado en XML utilizando una sintaxis que no es XML. El nombre de XPath deriva de la expresión de ruta, que proporciona un medio de direccionamiento jerárquico de los nodos en un árbol de documentos. XPath es un lenguaje de consulta con muchas posibilidades. XPath permite el procesamiento de valores conforme al modelo de datos DOM; se basa en una representación DOM del documento HTML y selecciona nodos según varios criterios. Las expresiones XPath también se pueden utilizar en C y C++, JavaScript, esquema XML, PHP, Python y muchos otros lenguajes.

XPath se utiliza principalmente para navegar por el DOM de un documento en lenguaje basado en XML utilizando expresiones XPath. Puede usar XPath en HTML y SVG en lugar de confiar en los métodos GetElement() o QuerySelectorAll() y otras funciones DOM.

Este artículo presenta cómo utilizar el método Evaluate() para navegar por el documento HTML y seleccionar nodos mediante consulta XPath (XPath Query). Aprenderá cómo seleccionar todas las fotos de un documento HTML utilizando expresiones XPath.

Método Evaluate()

Las consultas XPath se realizan principalmente utilizando el método Evaluate() de la clase Document. El método Evaluate(expression, contextNode, resolver, type, result) acepta una expresión XPath y otros parámetros dados y devuelve un resultado del tipo especificado. Consideremos los parámetros del método:

Consulta XPath (XPath Query): obtener imágenes de una página web

A menudo desea guardar una gran cantidad de imágenes de diferentes servicios, como fotos de un álbum en particular. Es posible hacerlo a mano, pero llevaría mucho tiempo. Por lo tanto, es largo e ineficiente, por lo que puedes usar la biblioteca Aspose.HTML para automatizar este proceso.

En este ejemplo, aprenderá cómo encontrar enlaces a todas las imágenes deseadas en una página web utilizando el método Evaluate() y la expresión XPath. XPath es un potente lenguaje de consulta que le brinda mucha libertad para personalizar las consultas. Echemos un vistazo al documento HTML xpath-image.htm. Consta de un encabezado y pie de página que contiene imágenes publicitarias, así como un elemento principal que contiene filas de fotografías intercaladas con banners publicitarios.

Obtenga enlaces a todas las imágenes del documento.

Comencemos con una consulta XPath sencilla para todas las imágenes del documento. A continuación se utiliza la expresión XPath //img. Selecciona todos los elementos img sin importar dónde se encuentren en el documento:

XPath Expression

1//img

C# code

1var result = doc.Evaluate("//img", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);

JavaScript code

1var result = document.evaluate("//img", document, null, XPathResult.ANY_TYPE, null);

Esta Consulta XPath devolverá todos los enlaces a imágenes (fotos, banners) del encabezado y pie de página, así como los que se encuentran entre las filas de fotos y entre ellas.

Deshazte de los banners en el encabezado y pie de página

Primero, eliminemos los banners en el encabezado y pie de página; hay muchas formas de hacerlo, pero en este ejemplo, configuraremos el filtrado por padre. La consulta XPath //main//img devuelve todos los elementos //img anidados dentro de todos los elementos //main. Este resultado ya es más adecuado para la solicitud de obtener fotografías del documento, pero aún contiene pancartas adicionales.

XPath Expression

1//main//img

C# code

1var result = doc.Evaluate("//main//img", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);

JavaScript code

1var result = document.evaluate("//main//img", document, null, XPathResult.ANY_TYPE, null);

Deshazte de algunos banners en el contenedor “main”

En el siguiente paso, eliminaremos los banners en los elementos secundarios /div pares del contenedor main. Esta expresión XPath le permite seleccionar todos los elementos secundarios /div cuyo número de posición dará el resto cuando se divida por 2, es decir, impar:

XPath Expression

1//main/div[position() mod 2 = 1]//img

C# code

1var result = doc.Evaluate("//main/div[position() mod 2 = 1]//img", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);

JavaScript code

1var result = document.evaluate("//main/div[position() mod 2 = 1]//img", document, null, XPathResult.ANY_TYPE, null);

Entonces, obtuvimos una lista que contiene enlaces a fotos y anuncios publicitarios ubicados en todos los elementos div impares que son hijos del contenedor main.

Obtenga solo enlaces a fotos del documento HTML

Para deshacerse de los anuncios publicitarios ubicados entre las fotos, la expresión XPath debe incluir el nombre de la clase de imagen porque todas las fotos en las filas tienen la clase correspondiente photo:

XPath Expression

1//main/div[position() mod 2 = 1]//img[@class = 'photo']

C# code

1var result = doc.Evaluate("//main/div[position() mod 2 = 1]//img[@class = 'photo']", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);

JavaScript code

1var result = document.evaluate("//main/div[position() mod 2 = 1]//img[@class = 'photo']", document, null, XPathResult.ANY_TYPE, null);

Como resultado, obtuvimos una lista que contiene solo enlaces a fotos. Así que lo único que queda es descargarlos.

Ejemplo de C#: obtenga solo enlaces a fotos del documento HTML

Consideremos el ejemplo de C# de cómo usar el método Evaluate() para seleccionar todas las fotos de un documento HTML usando expresiones XPath. Debes seguir algunos pasos:

  1. Cargue un archivo HTML existente ( xpath-image.htm).
  2. Utilice el método Evaluate() de la clase Document y pásele la expresión XPath y otros parámetros.
  3. Repita los nodos resultantes e imprímalos en la consola.
  4. Obtendrá una lista que contiene sólo enlaces a fotos del documento HTML.
 1// Create an instance of an HTML document
 2using (var doc = new HTMLDocument(Path.Combine(DataDir, "xpath-image.htm")))
 3{
 4    // Evaluate the XPath expression
 5    var result = doc.Evaluate("//main/div[position() mod 2 = 1]//img[@class = 'photo']", doc, doc.CreateNSResolver(doc), XPathResultType.Any, null);
 6    // Iterate over the resulted nodes and print them to the console
 7    Node node;
 8    while ((node = result.IterateNext()) != null)
 9    {
10        var img = (HTMLImageElement)node;
11        Console.WriteLine(img.Src);
12    }
13}

Aspose.HTML ofrece Aplicaciones web HTML gratuitas que son una colección en línea de convertidores, fusiones, herramientas de SEO, generadores de código HTML, herramientas de URL y más. Las aplicaciones funcionan en cualquier sistema operativo con un navegador web y no requieren ninguna instalación de software adicional. Es una manera rápida y fácil de resolver de manera eficiente y efectiva sus tareas relacionadas con HTML.

Texto “Aplicaciones web HTML”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.