我有一个字符串长字符串,其中包含一些标记:
client.Encoding = System.Text.Encoding.GetEncoding(1255);
string page = client.DownloadString("http://rotter.net/scoopscache.html");
StreamWriter w = new StreamWriter(@"d:\rotterhtml\rotterscoops.html");
w.Write(page);
w.Close();
我想从页面变量或html文件中获取两个标记之间的所有文本:
<a href="http://rotter.net/cgi-bin/forum/dcboard.cgi?az=read_count&om=81020&forum=scoops1"><b>test</b>
我想解析单词test。所以最后我会说出所有的话:
<a href="http://rotter.net/cgi-bin/forum/dcboard.cgi?az=read_count&om=81020&forum=scoops1"><b>
和</b>
编辑**
这是构造函数中我如何保存html文件:
client.Encoding = System.Text.Encoding.GetEncoding(1255);
string page = client.DownloadString("http://rotter.net/scoopscache.html");
StreamWriter w = new StreamWriter(@"d:\rotterhtml\rotterscoops.html");
w.Write(page);
w.Close();
ExtractText(@"d:\rotterhtml\rotterscoops.html");
private void ExtractText(string filePath)
{
List<string> text = new List<string>();
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.Load(filePath);
if (htmlDoc.DocumentNode != null)
{
var nodes = htmlDoc.DocumentNode.SelectNodes("//a/b");
foreach (var node in nodes)
{
//Console.WriteLine(node.InnerText);
text.Add(node.InnerText);
}
}
}
在文本列表中,我看不到希伯来语,而是胡言乱语。 我的硬盘上的html文件,我看到里面的希伯来字体,因为我在构造函数中编码它。 但是在文本列表中,我再次看到它是乱七八糟的。
答案 0 :(得分:2)
您可以使用HtmlAgilityPack之类的HTML解析库,这样您就可以轻松找到标记中要查找的信息:
string filePath = @"d:\rotterhtml\rotterscoops.html"
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.Load(filePath);
if (htmlDoc.DocumentNode != null)
{
var nodes = htmlDoc.DocumentNode.SelectNodes("//a/b");
foreach (var node in nodes)
{
Console.WriteLine(node.InnerText);
}
}
在此示例中,我选择了嵌套在<b>
标记内的所有<a>
标记的值。您可能需要调整选择器以满足您的需求:
htmlDoc.DocumentNode.SelectNodes("//a/b");