-2

我需要从互联网上加载一个长字符串,我已经做到了。现在我需要找到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;
}

我知道这有点奇怪。但这就是我所拥有的。

4

5 回答 5

6

使用HTML Agility Pack - 您尝试的任何其他方法都只会让您头疼

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;
于 2012-07-06T14:17:26.653 回答
3

如果您想在平面 C# 中执行此操作,并且您只查看 1 个标签:

int first_tag = str.IndexOf("<H1>");
int last_tag = str.IndexOf("</H1>");
string text = str.SubString((first_tag + 4), (last_tag - first_tag));
于 2012-07-06T14:20:04.613 回答
1

使用 HTML 库!

否则尝试:

String.IndexOf(String x )

http://msdn.microsoft.com/en-us/library/k8b1470s.aspx

您可以使用它来获取开始和结束标签的第一个索引。然后,您可以在这些索引之间进行阅读。

于 2012-07-06T14:18:24.847 回答
1

System.String 类具有IndexOf(String)等方法- 报告指定字符串第一次出现的从零开始的索引。

所以在你的情况下,你可以传入"<H1>". 然后你可以得到一个从那个点开始的子字符串,然后再次调用这个方法再次寻找"</H1>"

或者,如果您愿意,在 .NET 中使用正则表达式可能会更容易。这些位于 System.Tet.RegularExpressions 命名空间中。这些肯定更复杂。但我相信你可以练习使用一些小样本并了解黑暗面的力量!(errr....) 正则表达式的威力!:)

[编辑] 现在我看到其他人的答案,我绝对同意其他人。如果您需要做的事情比在 HTML 格式的字符串中获取一项更复杂,请使用 html 解析器。

于 2012-07-06T14:22:25.550 回答
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; }


        }
于 2012-07-06T14:47:53.760 回答