【发布时间】:2021-03-24 21:59:55
【问题描述】:
我正在学习使用 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 个元素感兴趣。
这种过滤可能吗?
【问题讨论】:
-
您真的需要自己检查长度和子字符串吗?
text.StartsWith("Version ")不会每次都分配一个新的字符串,如果text太短就会返回 false。 -
@madreflection 太棒了。我更熟悉 C++,并没有注意到列表中的那个方法。谢谢。
-
还有
Contains方法,text.Contains("Version") -
如果
rvts16类对于这些段落是唯一的,那么您应该首先查看是否可以对其进行过滤。 -
@madreflection 我不想依赖类名,因为它们是在我构建帮助文件时由 HelpNDoc 提供的。所以这些类名可能会改变。我已经在文件中隔离了正确的
div元素,并且我的历史内容遵循严格的模式。所以我认为我使用这种方法是安全的。
标签: c# html-agility-pack