首页 > 解决方案 > 使用 Html Agility Pack 选择所有以某个文本值开头的段落

问题描述

我正在学习使用 Html Agility Pack。

我有一系列看起来像这样的段落元素(为了清楚起见,代码拆分):

<p class="rvps2">
    <img alt="New Version Icon" 
         style="vertical-align: middle; padding : 1px; margin : 0px 5px;"
         src="lib/IMG_NewVersion.png">
    <span class="rvts16">Version 21.1.0 - 2021 Edition</span>
    <span class="rvts15"> (22nd March 2021)</span>
</p>

我只对以文本“版本”开头的段落感兴趣。目前我正在这样做:

// Select all Paragraph elements
var nodesParagraph = nodeRevHist.SelectNodes("p");

int iRevisionCount = 0;
foreach (HtmlNode itemParagraph in nodesParagraph)
{
    string text = itemParagraph.InnerText;
    if (text.Length > 7 && text.Substring(0, 7) == "Version")
    {
        iRevisionCount++;

是否nodesParagraph可以过滤到内部文本以“版本”开头的所有段落?

如果可能的话,这将使我的代码更干净。附带问题,我也只对这些段落元素中的前 5 个感兴趣。

这种过滤可能吗?

标签: c#html-agility-pack

解决方案


您可以获得内部文本以“版本”开头的前 5 个段落,如下所示:

var nodesParagraph = nodeRevHist
    .Elements("p")
    .Where(p => p.InnerText.Trim().StartsWith("Version"))
    .Take(5);

工作演示:https ://dotnetfiddle.net/uvwcUN


推荐阅读