HtmlAgilityPack使用Class在ChildNode中获取内容

时间:2014-11-04 10:13:47

标签: c# html-agility-pack nodes

我有一个基本的HTML页面。它包括omo区域。同一课程8不同的内容。

<div class="omo-page-wrapper">
    <div class="omo-part">
        <div class="omo-img">...</div>
        <div class="omo-info">
            <div class="r-logo">...</div>
            <div class="r-content font-hbold">
                <i>Content Area 1</i>
                <em>Content Area 2</em>
                <a href="/blabla">Href</a>
            </div>
        </div>
    </div>
    <div class="omo-part">
        <div class="omo-img">...</div>
        <div class="omo-info">
            <div class="r-logo">...</div>
            <div class="r-content font-hbold">
                <i>Content Area 1</i>
                <em>Content Area 2</em>                
                <a href="/blabla2">Href2</a>
            </div>
        </div>
    </div>
    <div class="omo-part">...</div>
    <div class="omo-part">...</div>
    <div class="omo-part">...</div>
    <div class="omo-part">...</div>
    <div class="omo-part">...</div>
    <div class="omo-part">...</div>   
</div>

我想在所有r-content font-hbold的类中获取所有内容(i,em,href)。我使用了foreach,我获得了所有节点。但我没有得到ChildNodes ..

HtmlDocument document = new HtmlDocument();
document.LoadHtml(html);

var allElementsWithClassTalkMedallion = document.DocumentNode.SelectNodes("//*[contains(@class,'r-content font-hbold')]");

foreach (HtmlNode node in allElementsWithClassTalkMedallion)
{
    dataTable.Rows.Add("i", "em", "href"); //??
}

return promotions;

8个(或更多)相同的类区域,3个子节点。我如何获得所有i,em,href内容?非常感谢。

1 个答案:

答案 0 :(得分:0)

一种可能的方法是,您可以使用SelectSingleNode()从每个node变量中一次获取一个特定节点:

foreach (HtmlNode node in allElementsWithClassTalkMedallion)
{
    var i = node.SelectSingleNode("i").InnerText.Trim();
    var em = node.SelectSingleNode("em").InnerText.Trim();
    var href = node.SelectSingleNode("href").InnerText.Trim();
    dataTable.Rows.Add(i, em, href);
}