0

想象一下下面的 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 敏捷包,但到目前为止没有成功。如果你现在有办法解决这个问题,请告诉我!

4

2 回答 2

1

使用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;
于 2013-09-22T11:49:04.760 回答
0

作为一种解决方法,您可以尝试正则表达式

 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");
于 2013-09-22T11:49:44.090 回答