получить p тегов, которые идут после определенного тега, используя htmlagilitypack - PullRequest
0 голосов
/ 02 ноября 2011

Я сканирую веб-сайт, используя htmlagilitypack c #:

i have in the source code of an html page

....
<p>this a p that come before h3</p>
....
....
<h3>this h3 </h3>

<p>first p after h3</p>

....

<p>seconde p after h3</p>

Я хочу, чтобы все получили все P, которые идут после

, есть ли способ использовать где фильтровать Psиспользуя position.

где (position (p)> position (h3))

Ответы [ 2 ]

1 голос
/ 16 марта 2015

Попробуйте следующий код:

var htmlText = "source code of your html page";
var htmlDoc.LoadHtml(htmlText);
var h3= htmlDoc.DocumentNode.SelectNodes("//h2");
var lineNum = h3[0].Line;
var p = htmlDoc.DocumentNode.SelectNodes("//p").Where(x => x.Line > lineNum);
1 голос
/ 08 ноября 2011

Вы можете использовать вспомогательный метод, такой как этот:

static IEnumerable<HtmlNode> FilteredTakeWhile(
    HtmlNode root,
    Func<HtmlNode, bool> predicate,
    Func<HtmlNode, bool> takePredicate)
{
    for (var currentNode = root.NextSibling;
         currentNode != null && takePredicate(currentNode);
         currentNode = currentNode.NextSibling)
    {
        if (predicate(currentNode))
            yield return currentNode;
    }
}

Затем использовать его:

var h3 = doc.DocumentNode.SelectSingleNode("h3");
// take all "p" nodes while we haven't reached the next "h3" node
var query = FilteredTakeWhile(h3, node => node.Name == "p", node => node.Name != "h3");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...