从html文档中获取值

时间:2013-11-25 21:55:33

标签: c# html html-agility-pack document nodes

我可以帮助从HTML文档中获取值吗?

以下是文件内容:

<html>
  <head>
    <style>body, table, input, select, textarea, button {   font: normal 1em Verdana, Sans-Serif; } body {  font-size: 0.8em; } a { color:#336600; } b { color:#003300; }.header {font-family: verdana; font-size: 15px; color:#003300; font-weight:bold;}.back {background-color:#DBF0DB;}.back2 {background-color:#009933;}            
    </style>
  </head>
  <body>
    <table border="0" cellpadding="3" cellspacing="1" width="100%">
      <tr>
        <td colspan="2" class="header">#827216</td>
      </tr>
    </table>
<body>
</html> 

我想要检索#827216值。

以下是我正在使用的代码,但无法正常运行:

hdoc.LoadHtml(FileContents);

var xID = hdoc.DocumentNode.SelectNodes("/html/body/table/tr/");

这是错误:

  

表达式必须求值为节点集

3 个答案:

答案 0 :(得分:2)

您的HTML代码不是有效的XML。 body标记未关闭。此外,您的XPath表达式应为/html/body/table/tr/td以转到td元素。另外,要获得一个元素,您应该使用selectSingleNode

答案 1 :(得分:0)

无论您格式错误的HTML如何,都会获得内容:

HtmlNodeCollection tables = hdoc.DocumentNode.SelectNodes("//table[1]");
HtmlNodeCollection cells = tables[0].SelectNodes("//tr/td");
var cellText = cell[0].InnerHtml;

您应该修复HTML,关闭<body>标记。

答案 2 :(得分:0)

关闭body标签并使用SelectSingleNode

XmlDocument doc = new XmlDocument();
doc.Load("test.html");

var xID = doc.SelectSingleNode("/html/body/table/tr/td");
textBox1.Text = xID.InnerText;

我知道这应该是针对xml的,但它也适用于html。