使用 C# 在 HTML 文件中搜索,其中存在许多类似的标记
本文关键字:许多类 存在 HTML 文件 搜索 使用 | 更新日期: 2023-09-27 18:32:15
想象下面的HTML文件部分:
<div class='span1 league'>
<div class='league-gold-1 leagues size-64'></div>
</div>
<div class='span4 stats'>
<div class='points'>
<span class="gold">491</span>
points
(<span class="gold">391</span> away for region #1)
</div>
<div class='games'>
Won <span class="text-success">37</span>,
lost <span class="text-error">51</span>,
ratio <span>42.05</span>%
</div>
<div class='race'>
Favorite Race:
<div class='race-terran races size-16'></div>
<span>Terran</span>
</div>
</div>
假设我需要获得输赢游戏的数量,在这种情况下为 37 和 51。还有点(在本例中为 491)。我一直在尝试使用 html 敏捷包,但到目前为止还没有成功。如果您现在有解决此问题的方法,请告诉我!
使用 HtmlAgilityPack
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(fname);
var won = doc.DocumentNode.SelectSingleNode("//div[@class='games']/*[@class='text-success']").InnerText;
var lost = doc.DocumentNode.SelectSingleNode("//div[@class='games']/*[@class='text-error']").InnerText;
var points = doc.DocumentNode.SelectSingleNode("//div[@class='points']/*[@class='gold']").InnerText;
您也可以使用 Linq 而不是 XPath
。var won = doc.DocumentNode.Descendants("span")
.First(s=>s.Attributes.Any(a=>a.Value=="text-success"))
.InnerText;
作为一种解决方法,您可以尝试正则表达式
Match m = Regex.Match(htmlstring, "<span class='"text-success'">([0-9]+?)</span>.*?<span class='"text-error'">([0-9]+?)</span>", RegexOptions.Singleline);
string won = m.Result("$1");
string loss = m.Result("$2");