2012-01-20 44 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