-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 名前空間にあります。それらは間違いなくより複雑です。しかし、いくつかの小さなサンプルを使用して練習し、ダークサイドの力を学ぶことができると確信しています! (えっと....) 正規表現の力!:)

[編集] 他の人の回答を見て、私は間違いなく他の人に同意します。HTML 形式の文字列で 1 つの項目を取得するよりも複雑なことを行う必要がある場合は、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 に答える