htmlagilitypack由th解析表

时间:2013-05-01 21:04:23

标签: c# html-agility-pack

我正在尝试使用htmlagilitypack解析下表。

    <tr>
      <th>
        Anställda:
      </th>
      <td>
        0 - 4
      </td>
    </tr>
    <tr>
      <th>
        Oms (tkr):
      </th>
      <td>
        5 409
      </td>
    </tr>

我试图提取 Oms(tkr)的值:(在这种情况下 5 409

下面的代码给了我上面的html表。问题是我抓住了Oms(tkr)值。还应该说Oms(tkr)并不总是在同一个地方,它可以在表中进一步向下或向上。我的意思是,Oms有时可能是Anställda所在的地方等等。

foreach (HtmlAgilityPack.HtmlNode graf in (IEnumerable<HtmlAgilityPack.HtmlNode>)doc.DocumentNode.SelectNodes("//div[@id=\"info\"]//table")) {
var tabellHTdML = graf.InnerHtml;
MessageBox.Show(tabellHTdML);

}

我试过:

if (tabellHTML.Contains("Oms"))
{
item.OMS = cells.InnerText;
}

但是似乎无法得到正确的价值。任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

以下代码:

HtmlDocument doc = new HtmlDocument();
doc.Load("test.htm");

Console.WriteLine(doc.DocumentNode.SelectSingleNode("//th[starts-with(normalize-space(text()), 'Oms')]").InnerHtml.Trim());

将转储此内容:

Oms (tkr)

但你必须手动解析结束。 Html Agility Pack只知道元素和属性。 XPATH表达式意味着:选择任何具有以“Oms”开头的文本内容的TH元素,一旦修剪(normalize-space)。