Navegación HTML en C#

Utilizando la biblioteca Aspose.HTML for .NET, puede crear fácilmente su propia aplicación, ya que nuestra API proporciona un potente conjunto de herramientas para analizar y recopilar información de documentos HTML.

Este artículo proporciona información sobre cómo extraer datos mediante programación de documentos HTML con Aspose.HTML for .NET API. Lo descubres:

El espacio de nombres Aspose.Html.Dom proporciona una API que representa e interactúa con cualquier documento HTML, XML o SVG y se basa completamente en la especificación WHATWG DOM compatible con muchos navegadores modernos. El DOM es un modelo de documento cargado en el navegador y que representa el documento como un árbol de nodos, donde cada nodo representa parte del documento (por ejemplo, un elemento, una cadena de texto o un comentario).

Consideraremos cómo el DOM representa un documento HTML en la memoria y cómo usar API para navegar a través de archivos HTML. Se pueden utilizar muchas formas para realizar navegación HTML. La siguiente lista muestra la forma más sencilla de acceder a todos los elementos DOM:

PropertyDescription
FirstChildAccessing this property of an element must return a reference to the first child node.
LastChildAccessing this property of an element must return a reference to the last child node
NextSiblingAccessing this property of an element must return a reference to the sibling node of that element which most immediately follows that element.
PreviousSiblingAccessing this property of an element must return a reference to the sibling node of that element which most immediately precedes that element.
ChildNodesReturns a list that contains all children of that element.

Cuatro de las propiedades de clase Node: FirstChild, LastChild, NextSibling y PreviousSibling, cada una proporciona una referencia en vivo a otro elemento con la relación definida con el elemento actual si el elemento relacionado existe. Para obtener una lista completa de clases y métodos representados en el espacio de nombres Aspose.Html.Dom, visite Fuente de referencia API.

Usando las propiedades mencionadas, puede navegar a través de un documento HTML de la siguiente manera:

 1// Prepare HTML code
 2var html_code = "<span>Hello,</span> <span>World!</span>";
 3
 4// Initialize a document from the prepared code
 5using (var document = new HTMLDocument(html_code, "."))
 6{
 7    // Get the reference to the first child (first <span>) of the <body>
 8    var element = document.Body.FirstChild;
 9    Console.WriteLine(element.TextContent); // output: Hello,
10
11    // Get the reference to the whitespace between html elements
12    element = element.NextSibling;
13    Console.WriteLine(element.TextContent); // output: ' '
14
15    // Get the reference to the second <span> element
16    element = element.NextSibling;
17    Console.WriteLine(element.TextContent); // output: World!
18
19    // Set an html variable for the document 
20    var html = document.DocumentElement.OuterHTML;
21
22    Console.WriteLine(html); // output: <html><head></head><body><span>Hello,</span> <span>World!</span></body></html>
23}

Inspeccionar HTML

Aspose.HTML contiene una lista de métodos que se basan en las Element Traversal Specifications. Puede realizar una inspección detallada del documento y sus elementos utilizando la API. El siguiente ejemplo de código muestra el uso generalizado de las funciones de Element Traversal.

 1// Load a document from a file
 2string documentPath = Path.Combine(DataDir, "html_file.html");
 3
 4using (var document = new HTMLDocument(documentPath))
 5{
 6    // Get the html element of the document
 7    var element = document.DocumentElement;                
 8    Console.WriteLine(element.TagName); // HTML
 9
10    // Get the last element of the html element
11    element = element.LastElementChild;
12    Console.WriteLine(element.TagName); // BODY
13
14    // Get the first element in the body element
15    element = element.FirstElementChild;
16    Console.WriteLine(element.TagName); // H1
17    Console.WriteLine(element.TextContent); // Header 1
18}

Nota: Debe especificar la ruta al archivo HTML de origen en su sistema de archivos local (documentPath).

La propiedad DocumentElement de la clase Documento proporciona acceso directo al elemento <html> del documento ( html_file.html). La propiedad LastElementChild de la clase Documento devuelve el último elemento hijo del elemento <html>. Es el elemento <body>. Según el fragmento de código anterior, la variable element se sobrecarga nuevamente y la propiedad FirstElementChild devuelve el primer hijo del elemento <body>. Es el elemento <h1>.

Uso de filtro personalizado

Para los escenarios más complicados, cuando necesita encontrar un nodo basado en un patrón específico (por ejemplo, obtener la lista de encabezados, enlaces, etc.), puede usar un TreeWalker o NodeIterator especializado con una implementación de Filter personalizada.

El siguiente ejemplo muestra cómo implementar su propio NodeFilter para omitir todos los elementos excepto las imágenes:

 1class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
 2{
 3    public override short AcceptNode(Node n)
 4    {
 5        // The current filter skips all elements, except IMG elements
 6        return string.Equals("img", n.LocalName)
 7            ? FILTER_ACCEPT
 8            : FILTER_SKIP;
 9    }
10}

Una vez que implemente un filtro, puede usar la navegación HTML de la siguiente manera:

 1// Prepare HTML code
 2var code = @"
 3    <p>Hello,</p>
 4    <img src='image1.png'>
 5    <img src='image2.png'>
 6    <p>World!</p>";
 7
 8// Initialize a document based on the prepared code
 9using (var document = new HTMLDocument(code, "."))
10{
11    // To start HTML navigation, we need to create an instance of TreeWalker
12    // The specified parameters mean that it starts walking from the root of the document, iterating all nodes and using our custom implementation of the filter
13    using (var iterator = document.CreateTreeWalker(document, NodeFilter.SHOW_ALL, new OnlyImageFilter()))
14    {                    
15        while (iterator.NextNode() != null)
16        {
17            // Since we are using our own filter, the current node will always be an instance of the HTMLImageElement
18            // So, we don't need the additional validations here
19            var image = (HTMLImageElement)iterator.CurrentNode;
20
21            Console.WriteLine(image.Src);
22            // output: image1.png
23            // output: image2.png
24
25            // Set an html variable for the document 
26            var html = document.DocumentElement.OuterHTML;                        
27        }
28    }
29}

Consulta XPath

La alternativa a la Navegación HTML es la consulta XPath ( XML Path Language) que a menudo se denomina simplemente XPath. Es un lenguaje de consulta que se puede utilizar para consultar datos de documentos HTML. Se basa en una representación DOM del documento HTML y selecciona nodos según varios criterios. La sintaxis de las expresiones XPath es bastante simple y, lo que es más importante, es fácil de leer y de soportar.

El siguiente ejemplo muestra cómo utilizar consultas XPath dentro de la API Aspose.HTML:

 1// Prepare HTML code
 2var code = @"
 3    <div class='happy'>
 4        <div>
 5            <span>Hello,</span>
 6        </div>
 7    </div>
 8    <p class='happy'>
 9        <span>World!</span>
10    </p>
11";
12
13// Initialize a document based on the prepared code
14using (var document = new HTMLDocument(code, "."))
15{
16    // Here we evaluate the XPath expression where we select all child <span> elements from elements whose 'class' attribute equals to 'happy':
17    var result = document.Evaluate("//*[@class='happy']//span",
18        document,
19        null,
20        XPathResultType.Any,
21        null);
22
23    // Iterate over the resulted nodes
24    for (Node node; (node = result.IterateNext()) != null;)
25    {
26        Console.WriteLine(node.TextContent);
27        // output: Hello,
28        // output: World!
29    }
30}

El artículo Cómo utilizar la consulta XPath en HTML – Método Evaluate() presenta cómo utilizar el método Evaluate() para navegar a través de un documento HTML y seleccionar nodos según varios criterios. Con ejemplos de C#, aprenderá cómo seleccionar todos los nodos con el nombre especificado mediante una consulta XPath.

Selector de CSS

Junto con Navegación HTML y XPath, puede utilizar CSS Selector API que también es compatible con nuestra biblioteca. Esta API está diseñada para crear un patrón de búsqueda para hacer coincidir elementos en un árbol de documentos basado en la sintaxis de Selectores CSS.

En el siguiente ejemplo, utilizamos el método QuerySelectorAll() para navegar a través de un documento HTML y buscar los elementos necesarios. Este método toma como parámetro el selector de consultas y devuelve una NodeList de todos los elementos que coinciden con el selector especificado.

 1// Prepare HTML code
 2var code = @"
 3    <div class='happy'>
 4        <div>
 5            <span>Hello,</span>
 6        </div>
 7    </div>
 8    <p class='happy'>
 9        <span>World!</span>
10    </p>
11";
12
13// Initialize a document based on the prepared code
14using (var document = new HTMLDocument(code, "."))
15{
16    // Here we create a CSS Selector that extracts all elements whose 'class' attribute equals 'happy' and their child <span> elements
17    var elements = document.QuerySelectorAll(".happy span");
18
19    // Iterate over the resulted list of elements
20    foreach (HTMLElement element in elements)
21    {
22        Console.WriteLine(element.InnerHTML);
23        // output: Hello,
24        // output: World!
25    }
26}

Ver también

  • Para obtener más información sobre cómo aplicar selectores de manera efectiva para seleccionar los elementos a los que desea aplicar estilo, visite el artículo Selectores CSS. Cubrirá los selectores básicos, los selectores combinados, los selectores de atributos, los selectores de grupo y los pseudo selectores.

  • En el artículo Cómo usar CSS Selector – QuerySelector() y QuerySelectorAll(), aprenderá cómo aplicar selectores de manera efectiva para seleccionar los elementos a los que desea aplicar estilo. QuerySelector() y QuerySelectorAll() son métodos que se utilizan para consultar elementos DOM que coinciden con un selector CSS.

  • Puede descargar los ejemplos completos de C# y los archivos de datos desde GitHub.

  • Aspose.HTML ofrece Aplicaciones web HTML gratuitas en línea 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. Convierta, fusione, codifique, genere código HTML, extraiga datos de la web o analice páginas web en términos de SEO fácilmente dondequiera que esté. Utilice nuestra colección de aplicaciones web HTML para realizar sus asuntos diarios y hacer que su flujo de trabajo sea fluido.

Texto “Aplicaciones web HTML”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.