2012-01-20 47 views
0

我正在開發一個應用程序,我必須從網站獲取數據。網站的格式爲:使用HtmlAgilityPack從網站提取數據

<div id="id1" class="class1"> 
    <ol class="cls_ol"> 
    <li> 
     <div class="class2">Content 1</div> 
     <div class="cls_img"> 
       *** Code for some image *** 
     </div> 
     Content 2 
    </li> 
    <li> *** Same like above <li> *** </li> 
    <li> *** Same like above <li> *** </li> 
    </ol> 
</div> 

我用代碼獲取這個...

protected void Button1_Click(object sender, EventArgs e) 
{ 
    var obj = new HtmlWeb(); 
    var document = obj.Load(" ** url of a website ** "); 

    var bold = document.DocumentNode.SelectNodes("//div[@class='class1']"); 

    foreach (var i in bold) 
    { 
     Response.Write(i.InnerHtml); 
    } 

但是,我的代碼的問題是這樣的,它也取的<div class="cls_img"></div>圖像。我不需要這個圖像。那麼,如何獲取<div id="id1" class="class1">的所有內容,而無需從<div class="cls_img">獲取圖片。

回答

0

循環遍歷節點並找到具有class =「cls_img」匹配屬性的節點並刪除該節點。

node.ParentNode.RemoveChild(node); 
1

第1步 - 選擇並刪除<div class="cls_img">內圖像<div class="class1">標籤中:

var images = document.DocumentNode.SelectNodes(
     "//div[@class='class1']//*//div[@class='cls_img']//img" 
); 

    // note that if no nodes found "images" variable will hold a null value 
    foreach (var image in images) 
    { 
     image.Remove(); 
    } 

第2步 - 選擇<div class="class1">元素(你已經做到了) - 現在沒有這種圖片:

var bold = document.DocumentNode.SelectNodes("//div[@class='class1']"); 
    foreach (var node in bold) 
    { 
     Console.Write(node.InnerHtml); 
    } 
+0

是的......這是行得通的。謝謝,你的幫助.. –

+0

嘿!亞歷克斯,你能幫我一把嗎?其實我是HtmlAgilityPact的新手。我想學習它。我想學習它的類,如HtmlNode類,HtmlNodeCollection類等。所以,請告訴我來源(如任何網站或電子書),從我可以學習它。 –

+0

@Sagar Kadam,據我所知它還沒有文檔(而不是你建議訪問他們的[討論]標籤](http://htmlagilitypack.codeplex.com/discussions)提問)。還有很多這裏的例子,在[stackoverflow](http://stackoverflow.com/questions/tagged/html-agility-pack)。另外,當您決定答案對您最有幫助時,通過單擊答案左側的複選框大綱將其標記爲接受的答案。 – Alex