Archivo .html> HTMLAgilityPack> Jerarquía de TreeView

c# html html-agility-pack treeview

Pregunta

Uso de HTMLAgilityPack + TreeView para crear una GUI de jerarquía de un archivo HTML. El archivo HTML está generado por CMS, y no está muy bien generado.

Necesita hacer lo siguiente: 1. Lea cada nodo del Nivel de esquema 0 en el TreeView.

HtmlNodeCollection ZeroLevelNodes = doc.DocumentNode.SelectNodes("//body/object[@type='text/sitemap']|//body/ul/object[@type='text/sitemap']|//body/ul/li/object[@type='text/sitemap']");

2. Lea los nodos del nivel de esquema 1 como hijos de sus respectivos nodos del nivel de esquema 0 Nota: Cada nodo del nivel de esquema 0 (menos algunos que no son importantes para esta pregunta) se presenta como <li><object><param /></object> (note la falta de una etiqueta de cierre </li> ). Los nodos que deben aparecer como hijos en el TreeView estarán en una lista desordenada <ul> que es el siguiente hermano de la etiqueta <li> del nodo de nivel 0, por ejemplo:

HtmlNodeCollection ZeroLevelNodes = doc.DocumentNode.SelectNodes("//body/object[@type='text/sitemap']|//body/ul/object[@type='text/sitemap']|//body/ul/li/object[@type='text/sitemap']");

Aquí está mi código actual para generar el nivel superior de jerarquía

HtmlNodeCollection ZeroLevelNodes = doc.DocumentNode.SelectNodes("//body/object[@type='text/sitemap']|//body/ul/object[@type='text/sitemap']|//body/ul/li/object[@type='text/sitemap']");

¿Alguien podría ayudarme con el código necesario para cargar los nodos "niños" (esquema de nivel 1) en el TreeView? (AddNode (zeroLevelNode, tNode)

Respuesta popular

¿Algo como esto?

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
TreeNode root = new TreeNode("HTML");
treeView1.Nodes.Add(root);

LoadTree(root, doc.DocumentNode);


void LoadTree(TreeNode treeNode, HtmlAgilityPack.HtmlNode rootNode)
{
    foreach (var node in rootNode.ChildNodes.Where(n=>n.Name!="#text"))
    {
        TreeNode n = new TreeNode(node.Name);
        node.Attributes.Select(a => a.Name + "=" + a.Value)
                       .ToList()
                       .ForEach(x => n.Nodes.Add(x));
        treeNode.Nodes.Add(n);

        LoadTree(n, node);
    }
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué