使用HTMLAgilityPack解析HTML

c# html-agility-pack

我有以下HTML,我正在嘗試使用HTML Agility Pack進行解析。

這是代碼返回的整個文件的片段:

<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 clddiv標籤之外,所有這些都正常工作。這一點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的直接後代。如果是這種情況,那麼使用ChildNodes而不是Descendants 。那是:

.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合法嗎? 是的,了解原因