Escriba LINQ para analizar la página aspx usando HtmlAgilityPack

asp.net c# html-agility-pack linq

Pregunta

He visto los siguientes enlaces y enlaces similares en SO y google para analizar la página aspx utilizando HTMLAgilityPack

Analizar documento html utilizando HtmlAgilityPack

Pero no sé cómo escribir una declaración LINQ de manera que pueda identificar los nombres de control de botones y etiquetas en mi página aspx.

Aquí está mi página aspx.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx.cs" Inherits="WebApplication1.WebForm4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

            <asp:Button ID="Button1" runat="server" Text="Button on page4" />
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label on page 4"></asp:Label>
        <br />
                    <br />
        <asp:Button ID="Button2" runat="server" Text="second button page 4" />

                        <br />
        <asp:Button ID="Button3" runat="server" Text="second button page 4" />



    </div>
    </form>
</body>
</html>

Quiero escribir LINQ usando el paquete de agilidad HTML para que pueda enumerar los siguientes resultados:

Los controles en esta página son Button1, Label1, Button2, Button3

Estoy teniendo problemas para escribir LINQ para analizar la página aspx. Por favor ayuda.

Esto es lo que he escrito hasta ahora y no funciona.

   HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.OptionFixNestedTags = true;

    string filePath = @"C:\WebApplication1\webform4.aspx";


    htmlDoc.Load(filePath);

        htmlDoc.Load(filePath);


        var pagecontrols = from links in htmlDoc.DocumentNode.Descendants("div")
                           where links.Attributes.Contains("runat")
                           select links.Attributes["ID"].Value;

        foreach (var pagecontrol in pagecontrols)
        {
            Response.Write(pagecontrol);
        }

Respuesta aceptada

Si estoy entendiendo tu problema correctamente, necesitas hacer algo como esto:

var pagecontrols = from links in htmlDoc.DocumentNode.Descendants("div")
                   where links.Attributes.Contains("runat")
                   select links.Attributes["ID"].Value;

Respuesta popular

No sé si ya ha encontrado la respuesta para esto, pero aquí está la solución que funcionó.

HtmlAgilityPack.HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags.Remove("form");
doc.LoadHtml(aspPage);
var elements = doc.DocumentNode.Descendants("div");  
var pageControls = from z in elements.ChildNodes
                     where z.Attributes.Contains("runat") //server controls
                     select z.Attributes["ID"].Value;


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow