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:
expression
es una representación de cadena del XPath que se va a evaluar.contextNode
especifica el nodo de contexto para la evaluación de la expresión XPath. Es común pasar el documento como nodo de contexto.resolver
permite la traducción de todos los prefijos, incluido el prefijo del espacio de nombres xml, dentro de la expresión XPath a los URI del espacio de nombres apropiados.type
corresponde al tipo de resultado XPathResult a devolver. Si se especifica un tipo específico, el resultado se devolverá como el tipo correspondiente.result
especifica un objeto de resultado específico que este método puede reutilizar y devolver. null es el más común y creará un nuevo XPathResult.
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:
- Cargue un archivo HTML existente ( xpath-image.htm).
- Utilice el método Evaluate() de la clase Document y pásele la expresión XPath y otros parámetros.
- Repita los nodos resultantes e imprímalos en la consola.
- 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.