.html 파일> HTMLAgilityPack> TreeView 계층 구조

c# html html-agility-pack treeview

문제

HTMLAgilityPack + TreeView를 사용하여 HTML 파일의 계층 구조 GUI를 생성합니다. HTML 파일은 CMS에 의해 생성되며, 그렇게 잘 생성되지는 않습니다.

다음을 수행해야합니다. 1. 각 Outline Level 0 노드를 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. 아웃 라인 레벨 1 노드를 각각의 아웃 라인 레벨 0 노드의 하위 노드로 읽습니다. 참고 : 각 아웃 라인 레벨 0 노드 (이 질문에서 중요하지 않은 일부 제외)는 <li><object><param /></object> (닫기 </li> 태그가 없음을 확인하십시오). TreeView에 자식으로 나타나야하는 노드는 레벨 0 노드의 <li> 태그의 다음 형제 인 순서가 지정되지 않은 목록 <ul> 에 있습니다. 예를 들면 다음과 같습니다.

<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>

다음은 현재 최상위 수준의 계층 구조를 생성하는 코드입니다.

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

누구든지 내게 "자식"(개요 수준 1) 노드를 TreeView에로드하는 데 필요한 코드를 제공 할 수 있습니까? (AddNode (zeroLevelNode, tNode)

인기 답변

이 같은?

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.