Может кто-нибудь объяснить этот бит кода HtmlAgilityPack? - PullRequest
4 голосов
/ 21 декабря 2010

Я старался изо всех сил добавлять комментарии через код, но я застрял в некоторых частях.

// create a new instance of the HtmlDocument Class called doc
1: HtmlDocument doc = new HtmlDocument();

// the Load method is called here to load the variable result which is html 
// formatted into a string in a previous code snippet
2: doc.Load(new StringReader(result));

// a new variable called root with datatype HtmlNode is created here. 
// Im not sure what doc.DocumentNode refers to?
3: HtmlNode root = doc.DocumentNode;
4:  

// a list is getting constructed here. I haven't had much experience 
// with constructing lists yet
5: List<string> anchorTags = new List<string>();
6:  

// a foreach loop is used to loop through the html document to 
// extract html with 'a' attributes I think..      
7: foreach (HtmlNode link in root.SelectNodes("//a"))
8: {
// dont really know whats going on here
9:     string att = link.OuterHtml;
// dont really know whats going on here too
10:     anchorTags.Add(att)
11: }

Я поднял этот пример кода с здесь . Кредит Фарук Кайзер

Ответы [ 2 ]

5 голосов
/ 21 декабря 2010

В терминах HTML Agility Pack «// a» означает «Найти все теги с именем« a »или« A »в любом месте документа». См. Документацию XPATH для получения более общей справки по XPATH (независимо от гибкого пакета HTML). Так что если ваш документ выглядит так:

<div>
  <A href="xxx">anchor 1</a>
  <table ...>
    <a href="zzz">anchor 2</A>
  </table>
</div>

Вы получите два якорных HTML-элемента. OuterHtml представляет HTML-код узла, включая сам узел, тогда как InnerHtml представляет только HTML-содержимое узла. Итак, вот два OuterHtml:

  <A href="xxx">anchor 1</a>

и

<a href="zzz">anchor 2</A>

Примечание. Я указал 'a' или 'A', потому что реализация HAP заботится о HTML или не учитывает регистр. И "// A" не работает по умолчанию. Вы должны указать теги в нижнем регистре.

5 голосов
/ 21 декабря 2010

Ключ - метод SelectNodes. Эта часть использовала XPath для извлечения списка узлов из HTML, который соответствует вашему запросу.

Здесь я выучил свой XPath: http://www.w3schools.com/xpath/default.asp

Затем он просто проходит по тем узлам, которые соответствуют, и получает OuterHTML - полный HTML-код, включая теги, и добавляет их в список строк. Список в основном просто массив, но более гибкий. Если вам нужно только содержимое, а не вложенные теги, используйте HtmlNode.InnerHTML или HtmlNode.InnerText.

...