HTMLAgilityPack을 사용하여 HTML 구문 분석하기

c# html-agility-pack

문제

HTML 애자일 팩을 사용하여 구문 분석하려고하는 다음 HTML이 있습니다.

이것은 코드에 의해 반환되는 전체 파일의 스 니펫입니다.

<div class="story-body fnt-13 p20-b user-gen">
    <p>text here text here text </p>
    <p>text here text here text text here text here text text here text here text text here text here text </p>
    <div  class="gallery clr bdr aln-c js-no-shadow mod  cld">
        <div>
            <ol>
                <li class="fader-item aln-c ">
                    <div class="imageWrap m10-b">
                       &#8203;<img class="http://www.domain.com/picture.png| " src="http://www.domain.com/picture.png" alt="alt text" />
                    </div>
                    <p class="caption">caption text</p>
                </li>
            </ol>
        </div>
    </div >
    <p>text here text here text text here text here text text here text here text text here text here text </p>
    <p>text here text here text text here text here text text here text here text text here text here text text here text here text </p>
    <p>text here text here text text here text here text text here text here text text here text here text text here text here text </p>
</div>

다음 코드를 사용하여이 스 니펫을 얻습니다.

<div class="story-body fnt-13 p20-b user-gen">
    <p>text here text here text </p>
    <p>text here text here text text here text here text text here text here text text here text here text </p>
    <div  class="gallery clr bdr aln-c js-no-shadow mod  cld">
        <div>
            <ol>
                <li class="fader-item aln-c ">
                    <div class="imageWrap m10-b">
                       &#8203;<img class="http://www.domain.com/picture.png| " src="http://www.domain.com/picture.png" alt="alt text" />
                    </div>
                    <p class="caption">caption text</p>
                </li>
            </ol>
        </div>
    </div >
    <p>text here text here text text here text here text text here text here text text here text here text </p>
    <p>text here text here text text here text here text text here text here text text here text here text text here text here text </p>
    <p>text here text here text text here text here text text here text here text text here text here text text here text here text </p>
</div>

코드는 각 p 반복하며 (현재는) 텍스트 상자에 코드를 추가합니다. 클래스 gallery clr bdr aln-c js-no-shadow mod cld 하는 div 태그 이외의 모든 것이 올바르게 작동합니다. 이 HTML 비트의 결과는 &#8203; 및 캡션 텍스트 비트.

결과에서이를 생략하는 가장 좋은 방법은 무엇입니까?

수락 된 답변

XPATH는 당신의 친구입니다. 이것을 시도하고 그 진절머리 나는 xlink 구문을 잊어 버리십시오 :-)

HtmlNodeCollection tl = document.DocumentNode.SelectNodes("//p[not(@*)]");
foreach (HtmlAgilityPack.HtmlNode node in tl)
{
    Console.WriteLine(node.InnerText.Trim());
}

이 식은 속성이 설정되지 않은 모든 P 노드를 선택합니다. 다른 샘플은 다음을 참조하십시오. XPath 구문


인기 답변

당신이 묻고있는 것이 명확하지 않습니다. 나는 당신이 특정 div의 바로 후손을 얻는 방법을 묻고 있다고 생각한다 . 그렇다면 Descendants ChildNodes 보다는 Descendants ChildNodes 를 사용하십시오. 그건:

.SelectMany(div => div.ChildNodes().Where(n => n.Name == "p"))

문제는 Descendants 이 문서 트리를 완전히 재귀 적으로 처리한다는 것입니다.




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