-1

このhtmlの文字列があります:

<div class="cnt_listas"><ol id="listagem1" class="cols_2">
<li><a href="/laura-pausini/73280/">16/5/74</a></li>
<li><a href="/laura-pausini/73280/traducao.html">16/5/74</a></li>
</div>

と の間のすべてのテキストを取得する必要があり<ol id="listagem1" class="cols_2">ます</div>。この文字列のテキストはそれとは異なる場合があります。これは Web サイトの結果です。テキストのこの部分を取得するにはどうすればよいですか?

この場合、必要なテキストは次のようになります。

<li><a href="/laura-pausini/73280/">16/5/74</a></li>
<li><a href="/laura-pausini/73280/traducao.html">16/5/74</a></li>
4

4 に答える 4

2

HtmlAgilityPackを使用 してhtmlを解析します

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var h = doc.DocumentNode.SelectSingleNode("//ol[@id='listagem1']").InnerHtml;
于 2012-10-04T05:54:38.807 に答える
0

同じアルゴリズムを必要としているときに、数週間前に Stackoverflow で見つけたこのコードはどうですか?

private IEnumerable<string> GetSubStrings(string input, string start, string end)
{
    Regex r = new Regex(Regex.Escape(start) + "(.*?)" + Regex.Escape(end));
    MatchCollection matches = r.Matches(input);
    foreach (Match match in matches)
        yield return match.Groups[1].Value;
}

編集: これは、このコードのソースです。

EDIT 2:私の答えに対する1つのコメントに反論するには、これを見てください。

于 2012-10-03T23:23:06.677 に答える
0

HTML を解析するための最良の方法ではありませんが、ここでは、一般的に、あなたが求めている方法で文字列に対して機能する拡張メソッドを示します。

public static string Between(this string source, string start, string end)
{
    // Find the first occurence of the start string
    var i = source.IndexOf(start);
    if (i < 0)
        return string.Empty;

    // Advance past the start string
    i += start.Length;

    // Find the next occurence of the end string
    var j = source.IndexOf(end, i);
    if (j < 0)
        return string.Empty;

    // Return the string found between the positions
    return source.Substring(i, j - i);
}

それを静的クラスに入れてから、次のように呼び出します。

var substring = s.Between("foo","bar");

特殊なケース (文字列が見つからないなど) の必要に応じて操作します。

于 2012-10-03T23:38:25.157 に答える
-1

私はあなたが言っていることを正確に理解していません...多分これ:

string specificWord = stringWhtml.Substring(stringWhtml.IndexOf("cols_2") + 8, stringWhtml.IndexOf("</div>"));
于 2012-10-03T23:21:56.310 に答える