2016-10-17 5 views
1

약간 복잡 할 수 있지만 매우 열심히 노력하여 결과를 얻습니다. HtmlAgilityPack이있는 사이트에서 비디오 링크를 가져오고 있습니다.두 값 사이의 값 삭제

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"링크는 정상입니다.

는하지만 난 때문에 굵게 표시된 위치에 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

이 기능을 사용 : 진행 트래비스 샤프

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(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)); 
} 

이처럼 전화 아마도 적합하지 않을 것이다.

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는 변수에서 반환 된 값을 가져옵니다.
그리고 우리는 다음과 같이 호출 : 만약`url.Contains (? "DK")`추가

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

True - FilterLinks는 정확한 최종 결과를 제공합니다. FilterLinks (...) .ToArray() 또는 FilterLinks.ToList()를 호출하면 필요한 객체 유형이 생성됩니다. –