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