2010-11-02 99 views
1

我尝试使用HtmlAgilityPack从html解析图像URL。在html文件中我有img标签:使用HtmlAgilityPack-Xpath解析HTML文档,RegExp

<a class="css_foto" href="" title="Fotka: MyKe015"> 
    <span> 
     <img src="http://213.215.107.125/fotky/1358/93/v_13589304.jpg?v=6" 
      width="176" height="216" alt="Fotka: MyKe015" /> 
    </span> 
</a> 

我需要从这个img标签属性src。我需要这个:http://213.215.107.125/fotky/1358/93/v_13589304.jpg?v=6。

我知道这一点:

  1. Src的属性附加伤害包括URL,URL开始 与 http://213.215.107.125/fotky
  2. 我知道ALT属性附加伤害网址的价值 有 变量lenght和html doc 包括其他的带有url的标签,它以 开头http://213.215.107.125/fotky
  3. 我知道img标签的alt属性(Fotka:Myke015))

任何进展,我尝试了很多方法,但是没有什么工作好。

最后我试试这个:

List<string> src; 

    var req = (HttpWebRequest)WebRequest.Create("http://pokec.azet.sk/myke015"); 
    req.Method = "GET"; 

    using (WebResponse odpoved = req.GetResponse()) 
    { 
     var htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
     htmlDoc.Load(odpoved.GetResponseStream()); 

     var nodes = htmlDoc.DocumentNode.SelectNodes("//img[@src]"); 
     src = new List<string>(nodes.Count); 

     if (nodes != null) 
     { 
      foreach (var node in nodes) 
      { 
       if (node.Id != null) 
        src.Add(node.Id); 
      } 
     } 
    } 

回答

3

你的XPath选择img节点,不属于他们的src属性。

相反的(选择有一个src属性的所有图像标记):

var nodes = htmlDoc.DocumentNode.SelectNodes("//img[@src]"); 

使用此(选择src属性,这些属性都是img元素的子节点):

var nodes = htmlDoc.DocumentNode.SelectNodes("//img/@src"); 
+0

Oded,我该如何在Xpath中指定v arc的src atribute。 src =“Fotka:miky015” – Tom 2010-11-02 12:54:20

+0

@Lucas - 此时,您可以使用'node.InnerText'来获取值。 – Oded 2010-11-02 12:55:18

+0

Oded我用你的advace,但是我得到错误:'// img @ src'有一个无效的标记,如果我用你的Xpath exp“// img @ src”。 – Tom 2010-11-02 13:00:35

0

这XPath 1.0表达式:

//a[@alt='Fotka: MyKe015']/@src