2016-10-17 6 views
1

少し複雑かもしれませんが、私は非常に努力して結果を得ました。私はHtmlAgilityPackのサイトからビデオリンクを取得しています。2つの値の間の値を削除する

HtmlWeb hw = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument doc = hw.Load(@"C:\Users\e9396\Desktop\r.html"); 
foreach (HtmlNode links in doc.DocumentNode.SelectNodes("//a[@href]")) 
{ 
    if (links.NextSibling != null) 
    { 
     ArrayList ArrayLinksList = new ArrayList(); 
     ArrayLinksList.Add(links.Attributes["href"].Value); 
     listbox.Items.AddRange(ArrayLinksList.ToArray()); 
    } 
} 

ただし、一部のリンクは次のとおりです。

/video/93409905175 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93409905175&st.cmd=userMain 
/video/93361801751 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93361801751&st.cmd=userMain 
/video/93442476567 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93442476567&st.cmd=userMain 
/video/93409839639 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93409839639&st.cmd=userMain 
/video/93442411031 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93442411031&st.cmd=userMain 
/video/93442345495 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93442345495&st.cmd=userMain 
/video/93461940759 
/dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93461940759&st.cmd=userMain 

このようなリンクは "/ video/93409905175"でOKです。

しかし、私は、私は理由太字印を付けた位置でのIDのそれを消去することはできません。この

"/video/93409905175 /dk?cmd=VideoVitrinaPopup&st.redirect=myVideo&st.vvp_cmd=VideoVitrinaPopupMovieEdit&st.vv_movieId=93409905175&st.cmd=userMain".

のようなリンクを削除したいです。

私はそのようになりたい、ありがとう。

/video/93409905175 
/video/93361801751 
/video/93442476567 
/video/93409839639 
/video/93442411031 
/video/93442345495 
/video/93461940759 
+0

なぜif文でリンクを削除しませんか? – cDima

+0

@cDima私は知らない、私はちょうどリンクを取得しようとしました。これを確認することができます。[http://hizliresim.eyuperdogan.com.tr/files/t7N2U3.png] –

答えて

1

この機能を使用:

public static IEnumerable<string> FilterLinks(HtmlDocument doc, string regexFilter) 
{ 
    var regex = new Regex(regexFilter); 
    return doc.DocumentNode 
     .SelectNodes("//a[@href]") 
     .Where(n => n.NextSibling != null && 
       regex.IsMatch(n.GetAttributeValue("href", string.Empty))) 
     .Select(n => n.GetAttributeValue("href", string.Empty)); 
} 

はこのようにそれを呼び出します。進捗トラヴィスシャープ用

foreach(var link in FilterLinks(doc, @"^\/video\/[0-9]*")) listbox.Items.Add(link); 
+0

エラーが発生しました。引数1: 'System.Collections.Generic.IEnumerable 'から 'System'に変換できません。 Windowsの.Forms.ListBox.ObjectCollection ' –

+0

listbox.Items.AddRange(FilterLinks(doc、@ "^ \/video \/[0-9] *")。ToArray());またはそのようなものです。あなたが列挙できるリストの一般的な種類です。 –

0

おかげではなく、プロシージャによって返された値の型がリンクであるFilterLinksおそらく適切ではない。

public static IEnumerable<string> FilterLinks(HtmlAgilityPack.HtmlDocument doc, string regexFilter) 
{ 
    var regex = new Regex(regexFilter); 
    return doc.DocumentNode 
       .SelectNodes("//a[@href]") 
       .Where(n => n.NextSibling != null 
         && regex.IsMatch(n.GetAttributeValue("href", string.Empty))) 
       .Select(n => n.GetAttributeValue("href", string.Empty)); 
} 

FilterLinksは変数から返された値を取得します。
そして、私たちはこのようにそれを呼び出します。if `url.Contains( "?DK")`追加、

var xLinkeler = FilterLinks(doc, @"^\/video\/[0-9]*"); 
foreach (var iett in xLinkeler) 
{ 
    listbox.Items.Add(iett); 
} 
+0

True - FilterLinkは正確な最終結果を提供します。 FilterLinks(...).ToArray()またはFilterLinks.ToList()を呼び出すだけで、必要なオブジェクト型が生成されます。 –

関連する問題