HTML-Datei> HTMLAgilityPack> TreeView-Hierarchie

c# html html-agility-pack treeview

Frage

Verwenden von HTMLAgilityPack + TreeView zum Erstellen einer Hierarchie-GUI einer HTML-Datei. Die HTML-Datei ist CMS-generiert und nicht sehr gut darin generiert.

Muss Folgendes tun: 1. Lesen Sie jeden Knoten der Gliederungsebene 0 in der 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. Lesen Sie die Knoten der Gliederungsstufe 1 als untergeordnete Elemente der Knoten ihrer Gliederungsebene 0. Anmerkung: Jeder Knoten der Gliederungsstufe 0 (abzüglich einiger weniger, die für diese Frage nicht wichtig sind) wird als <li><object><param /></object> (beachten Sie das Fehlen eines abschließenden </li> Tags). Die Knoten, die in der TreeView als untergeordnete Elemente angezeigt werden müssen, befinden sich in einer ungeordneten Liste <ul> , die das nächste Nebenprodukt des Knotens <li> einer Ebene 0 ist. Beispiel:

<ul>
    <li>
        <object>
            <param name="**exampleLevel0**" value="**example.htm**" /> //value example.htm as the text in the level 0 node.
        </object>
    <ul>
        <li>
            <object>
               <param name="**ExampleLevel1**" value="childnode.htm" /> //childnode.htm as the text in the level 1 child node.
            </object>
        <li>
            <object>
               <param name="**ExampleLevel1_2**" value="childnode2.htm" /> //childnode2.htm as the text in the level 1 child node.
            </object>
    </ul>
 </ul>

Hier ist mein aktueller Code, um die oberste Hierarchieebene zu generieren

HtmlNodeCollection tocNodes = doc.DocumentNode.SelectNodes("//body/object[@type='text/sitemap']|//body/ul/object[@type='text/sitemap']|//body/ul/li/object[@type='text/sitemap']");
foreach (HtmlNode zeroLevelNode in zeroLevelNodes)
        {

            TreeNode tNode = new TreeNode();
            HtmlNode paramNode = zeroLevelNode.SelectSingleNode("param[@name]");
            string paramName = paramNode.GetAttributeValue("name", null);
            string paramValue = paramNode.GetAttributeValue("value", null);
            TreeView.Nodes.Add(new TreeNode(paramValue));
            tNode = TreeView.Nodes[i];
            AddNode(zeroLevelNode, tNode);
            i += 1;
        }

Könnte mir jemand mit dem Code helfen, der benötigt wird, um die "Kinder" (Gliederungslevel 1) Knoten in das TreeView zu laden? (AddNode (ZeroLevelNode, tNode)

Beliebte Antwort

Etwas wie das?

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);
    }
}



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum