HTMLAgilityPack으로 모든 DOM 요소를 선택하십시오.

.net c# dom html html-agility-pack

문제

비슷한 질문을하고 온라인으로 검색해 왔지만 솔루션을 찾을 수없는 것 같습니다. 내가 뭘하려고하는지 순서 (등) 모든 DOM 요소를 선택하고 arraylist 또는 뭔가 넣어.

현재 나는 가지고있다.

public void Parse()
    {
        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

        // There are various options, set as needed
        //htmlDoc.OptionFixNestedTags = true;

        // filePath is a path to a file containing the html
        htmlDoc.Load("Test.html");

        // Use:  htmlDoc.LoadHtml(xmlString);  to load from a string (was htmlDoc.LoadXML(xmlString)

        // ParseErrors is an ArrayList containing any errors from the Load statement
        if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
        {
            Console.WriteLine("There was an error parsing the HTML file");
        }
        else
        {
            if (htmlDoc.DocumentNode != null)
            {
                htmlDoc.DocumentNode.Descendants();

                Console.WriteLine("document node not null");
                //HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

                foreach (HtmlNode node in htmlDoc.DocumentNode.Descendants())
                {
                    Console.WriteLine(node.Name);
                }
            }
        }
    }

코드 아웃은 노드 (html, title, image 등)의 이름을 지정하지만 닫는 태그는 "#text"로 출력합니다. 이 태그는 "/"로 시작하기 때문에 모든 DOM 요소를 올바르게 읽을 수 있습니까?

수락 된 답변

"#text"는 텍스트 노드의 이름이며 닫는 태그는 DOM에서 고유 한 것으로 표시되지 않습니다.

<div><span>foo</span> bar</div>

당신에게 나무를 줄 것입니다.

<div><span>foo</span> bar</div>

인기 답변

#text 요소는 태그를 닫는 대신 줄 바꿈이라고 생각합니다. 예를 들어 다음과 같은 html 입력 :

<div>
    <a href="http://example.org"></a>
</div>

귀하의 코드를 사용하여 출력됩니다 :

<div>
    <a href="http://example.org"></a>
</div>

대신이 XPath 쿼리를 사용하여 일반 텍스트 노드가 아닌 모든 요소를 ​​가져올 수 있습니다 (이러한 불필요한 줄 바꿈을 건너 뜁니다).

<div>
    <a href="http://example.org"></a>
</div>

XPath는 모든 이름 ( * )을 가진 현재 요소의 모든 하위 항목을 선택한다는 것을 의미합니다.




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