Анализ HTML-документа с помощью HtmlAgilityPack-Xpath, RegExp - PullRequest
1 голос
/ 02 ноября 2010

Я пытаюсь проанализировать URL-адрес изображения из HTML с HtmlAgilityPack. В HTML-документе у меня есть тег img:

<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. Я знаю значение альтернативного URL иметь Переменная длина, а также HTML документ состоят из других тегов img с URL, которые начинаются с http://213.215.107.125/fotky
  3. Я знаю атрибут alt тега img (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);
            }
        }
    }

Ответы [ 2 ]

3 голосов
/ 02 ноября 2010

Ваш XPath выбирает узлы img, а не принадлежащие им атрибуты src.

Вместо (выбор всех тегов изображения с атрибутом src):

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

Используйте это (выберите атрибуты src, которые являются дочерними узлами всех элементов img):

var nodes = htmlDoc.DocumentNode.SelectNodes("//img/@src");
0 голосов
/ 02 ноября 2010

Это выражение XPath 1.0:

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