我需要从互联网上加载一个长字符串,我已经这样做了。现在我需要找到H1
标头标签并打印内容。
最短或最简单的方法是什么?
for (int x = 0; x < tempString.Length; x++)
{
if (write == 2)
{
name =name + tempString[x];
lenght++;
}
if (tempString[x] == '<' && tempString[x] == 'h' && tempString[x] == '1' )
write = 1;
if (write == 1 && tempString[x] == '>')
write = 2;
if (tempString[x] == '-' && write == 1)
write = 0;
}
我知道这有点奇怪。但这就是我的全部。
答案 0 :(得分:6)
使用HTML Agility Pack - 您尝试的其他任何内容都只会导致headache。
HtmlAgility示例:
var html = "<html><head></head><body><h1>hello</h1></body></html>";
HtmlDocument d = new HtmlDocument();
d.LoadHtml(html);
var h1Contents = d.DocumentNode.SelectSingleNode("//h1").InnerText;
答案 1 :(得分:3)
如果你想在平面C#中做,而你只看一个标签:
int first_tag = str.IndexOf("<H1>");
int last_tag = str.IndexOf("</H1>");
string text = str.SubString((first_tag + 4), (last_tag - first_tag));
答案 2 :(得分:1)
使用HTML库!
否则尝试:
String.IndexOf(String x )
http://msdn.microsoft.com/en-us/library/k8b1470s.aspx
您可以使用它来获取开始和结束标记的第一个索引。然后你可以在这些指数之间阅读。
答案 3 :(得分:1)
System.String类具有 IndexOf(String)等方法 - 报告指定字符串第一次出现的从零开始的索引。
所以在你的情况下,你可以传递"<H1>"
。然后您可以从该点开始获取子字符串,然后再次调用此方法再次查找"</H1>"
。
或者如果您愿意,在.NET中使用正则表达式可能更容易。这些可以在System.Tet.RegularExpressions命名空间中找到。那些肯定更复杂。但我相信你可以练习使用一些小样本并学习黑暗面的力量! (错误....)正则表达式的力量! :)
[edit]现在我看到了其他人的答案,我绝对同意其他人的看法。如果您需要做一些比在HTML格式的字符串中获取一个项目更复杂的事情,请使用html解析器。
答案 4 :(得分:0)
以上所有工作都很好,我不能使用任何外部库
这对我很有用
for (int x = 0; x < tempString.Length; x++)
{
if (tempString[x] == '-' && write == 2)
{ write = 0; }
if (write == 2)
{
title =title + tempString[x];
lenght++;
}
if (tempString[x] == '<' && tempString[x+1] == 'h' && tempString[x+2] == '1' )
{ write = 1; }
if (write == 1 && tempString[x] == '>')
{ write = 2; }
}