如何使用htmlagilitypack解析此HTML文本?

时间:2015-09-07 09:14:24

标签: c# html-agility-pack innerhtml

以下是代码行

    <td class="line1left"><a href="scenario_WLM-16-SCENARIOS.html#population_SCN02_MS_AddNotes_CAM">SCN02_MS_AddNotes_CAM</a></td><td class="line1left">798 (6.14%)
    </td><td class="line1left">0.9</td><td class="line1left">0s (<span> - %</span>)
    </td><td class="line1left">0% (<span class="goodPercentage">-100%</span>)
    </td>

    <td class="line1left"><a href="scenario_WLM-16-SCENARIOS.html#population_SCN05_MS_UpdateCustomer_CAM">SCN05_MS_UpdateCustomer_CAM</a></td><td class="line1left">888 (6.83%)
    </td><td class="line1left">1.0</td><td class="line1left">0s (<span> - %</span>)
    </td><td class="line1left">0% (<span class="goodPercentage">-100%</span>)
    </td>

从第一个区块开始,我需要获得SCN02_MS_AddNotes_CAM798。要获得798我正在使用此代码,但我也获得了(6.14%),这是我不想要的。

    var content1 = doc1.DocumentNode.SelectNodes("//td[@class='line1left']")[1].InnerText;

我只想获得798。那么有人可以帮助我吗?

我也想知道如何从第二个块获取相同的值。我的印象是括号内的数字表示类line1left的不同出现次数。但这里它代表了不同的InnerHtml元素。

    [1]

有人知道如何让它发挥作用吗? 非常感谢提前。!

2 个答案:

答案 0 :(得分:0)

  var line1left_list = (from d in document.DocumentNode.Descendants()
                                where d.Name == "td " && d.Attributes["class"] != null
                                && (d.Attributes["class"].Value == "line1left")
                                select d);

  foreach (HtmlNode line1left in line1left_list)
  {
        var _link = line1left.Descendants("a").FirstOrDefault();

        string linkUrl = "";
        string link = "";

        if (_link != null)
        {
             linkUrl = _link.Attributes["href"].Value;
             link = _link.InnerText


        }
  }         

答案 1 :(得分:0)

看起来你想要所有<td>标签的InnerText,其class属性为&#34; line1left&#34;,除非<td>里面有<a>,在这种情况下,您需要<a>

的InnerText

这是一个可以做到这一点的例子。如果<td><a>,则会选择<a>,否则会选择<td>

HtmlDocument doc1 = new HtmlDocument();
doc1.Load("xmlfile2.xml");

var nodes = doc1.DocumentNode.SelectNodes("(//td[@class='line1left']/a) | (//td[@class='line1left' and not(a)])");

foreach(var node in nodes)
    Console.WriteLine(node.InnerText.Trim());

这将选择文档中的所有节点。您可以使用常规C#代码去除各个值上不需要的格式。