从Html页面提取特定文本

时间:2010-11-19 14:55:50

标签: c#

Html页面看起来像这样

<tr>
<th rowspan="4" scope="row">General</th>
<td class="ttl"><a href="network-bands.php3">2G Network</a></td>
<td class="nfo">GSM 850 / 900 / 1800 / 1900 </td>
</tr><tr>
<td class="ttl"><a href="network-bands.php3">3G Network</a></td>
<td class="nfo">HSDPA 900 / 1900 / 2100 </td>
</tr>

为此我尝试使用

var text = document.getElementsByClassName("nfo")[0].innerHTML;

由Alex提供

但是我收到了这个错误 错误2当前上下文中不存在名称“document”C:\ Users \ Nabi Javid \ Documents \ Visual Studio 2008 \ Projects \ WpfApplication2 \ WpfApplication2 \ Window1.xaml.cs 30 22 WpfApplication2

我错过了一些Libary或其他什么

目前我的代码就像那样

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.Load("nokia_c5_03-3578.html");
             var text = document.getElementsByClassName("nfo")[0].innerHTML;

        } 
    }

}

5 个答案:

答案 0 :(得分:2)

您正在使用javascript代码混合C#代码。

而不是:

var text = document.getElementsByClassName("nfo")[0].innerHTML;

输入:

var text = htmlDoc.DocumentNode.SelectNodes("//td[@class='nfo']")[0].InnerHtml;

为了简单起见,我没有检查异常。

答案 1 :(得分:1)

我对.net并不是很深入,但看起来你正试图混合使用JavaScript代码

var text = document.getElementsByClassName("nfo")[0].innerHTML;

使用您的.net代码...?

答案 2 :(得分:0)

您必须使用htmlDoc变量来调用您的案例中的方法。 顺便说一句,HtmlDocument类没有具有该名称的方法。尝试查看是否可以在this list中找到符合您需求的其他匹配项。

如错误所示,document变量不会退出代码。

答案 3 :(得分:0)

你想要

吗?
var text = htmlDoc.getElementsByClassName("nfo")[0].innerHTML;

?不熟悉HTML Agility Pack,但这似乎有意义

答案 4 :(得分:0)

您可以使用next方法按类名获取元素,该方法返回在一个类属性中定义的几个类的元素:

private HtmlNodeCollection GetElementsByClassName(HtmlDocument htmlDocument, string className)
{
    string xpath =
        String.Format(
            "//*[contains(concat(' ', normalize-space(@class), ' '), ' {0} ')]",
            className);
    return htmlDocument.DocumentNode.SelectNodes(xpath);
}