2015-08-16 50 views
1

我有问题。我编程的Windows Phone 8.0应用程序,我没有看到我的应用程序中的任何图片。大概错误是在正则表达式,因为在调试regImg没有任何比赛我在我的RSS中看不到任何图片

类MainPage.xaml.cs中

string strURL = "https://news.google.com/news? cf=all&ned=pl_pl&hl=pl&topic=b&output=rss"; // URL of RssFeeds. 

和类ImageFromRssText.cs

public class ImageFromRssText : IValueConverter 
{ 
    // Get images from each SyndicationItem. 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) return null; 

     List<ImageItem> listUri = GetHtmlImageUrlList(value.ToString()); 
     return listUri; 
    } 

    /// <summary> 
    /// Get the URL of the all pictures from the HTML. 
    /// </summary> 
    /// <param name="sHtmlText">HTML code</param> 
    /// <returns>URL list of the all pictures</returns> 
    public static List<ImageItem> GetHtmlImageUrlList(string sHtmlText) 
    { 
     // The definition of a regular expression to match img tag. 
     Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase); 

     // The search for a matching string. 
     MatchCollection matches = regImg.Matches(sHtmlText); 
     int i = 0; 
     List<ImageItem> imgUrlList = new List<ImageItem>(); 




     // Get a list of matches 
     foreach (Match match in matches) 
     { 
      imgUrlList.Add(new ImageItem("img" + i, match.Groups["imgUrl"].Value)); 
      i++; 
     } 
     return imgUrlList; 
    } 
+0

1.代替'[\ S \ t \ r \ n] *'用'\ S *' - 2.使用'\ /?'而不是'/?';)。 –

+0

3.如何使用简单的正则表达式像'] *?src \ s * = \ s * [“''](? [^”''] *)[“''] [^>] *> '? )。 –

+0

任何解决方案不起作用:( – Remi

回答

0

确定。我在第二个项目中以不同的方式写了一点(昨天我写了一个新项目)。虽然问题是相同的,但它不会加载图片。功能HasImage总是返回false(虽然当图片存在),variabe图片为空(变量其余的都是OK)

public class FeedItemViewModel : System.ComponentModel.INotifyPropertyChanged 
{ 

    // Declaration - Title, Image, Lead, Url 

    private string _title; 

    public string Title 
    { 
     get 
     { 
      return _title; 
     } 
     set 
     { 
      _title = value; 
      OnPropertyChanged("Title"); 
     } 
    } 

    // All from RSS (Image and lead) 
    private string _lead; 

    public string Lead 
    { 
     get 
     { 
      return _lead; 
     } 
     set 
     { 
      _lead = value; 

      // Load picture 
      try 
      { 
       if (TryParseImageUrl(_lead, out _imageUrl)) 
        _imageUrl = _imageUrl.Replace("//", "http://"); 
      } 
      catch { } 

      OnPropertyChanged("Lead"); 
     } 
    } 

    private string _imageUrl; 

    public Uri Image 
    { 
     get 
     { 
      if (HasImage) 
       return new Uri(_imageUrl, UriKind.RelativeOrAbsolute); 

      return null; 
     } 
    } 

    // Check if picture exists 
    public bool HasImage 
    { 
     get 
     { 
      return (!string.IsNullOrEmpty(_imageUrl) && Uri.IsWellFormedUriString(_imageUrl, UriKind.RelativeOrAbsolute)); 
     } 
    } 

    // Download url news 
    private string _url; 

    public string Url 
    { 
     get 
     { 
      return _url; 
     } 
     set 
     { 
      _url = value; 
      OnPropertyChanged("Url"); 
     } 
    } 

    public void OnOpenUrl() 
    { 
     var wb = new Microsoft.Phone.Tasks.WebBrowserTask(); 
     wb.Uri = new Uri(_url); 
     wb.Show(); 
    } 


    // 3 method parse image 
    private static bool TryParseImageUrl(string description, out string result) 
    { 
     string str = ParseAnyImageInTheDescription(description); 

     result = str; 
     return (!string.IsNullOrEmpty(str) && Uri.IsWellFormedUriString(str, UriKind.RelativeOrAbsolute)); 
    } 

    private static string ParseAnyImageInTheDescription(string item) 
    { 
     if (item == null) { return null; } 

     return ParseImageUrlFromHtml(item); 
    } 

    private static string ParseImageUrlFromHtml(string html) 
    { 
     Match match = new Regex("src=(?:\\\"|\\')?(?<imgSrc>[^>]*[^/].(?:jpg|png|jpeg))(?:\\\"|\\')?").Match(html); 
     if ((match.Success && (match.Groups.Count > 1)) && (match.Groups[1].Captures.Count > 0)) 
     { 
      return match.Groups[1].Captures[0].Value; 
     } 
     return null; 
    } 


    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

可以请你在这里提供一个图像的样本链接??请从调试器复制。 – ssakash

+0

[链接] http://wrzucaj.net/image/1O5 [/链接]它的屏幕从调试器 – Remi

+0

匹配匹配=新的正则表达式(“src = "(。*)”); 尝试这一个..... – ssakash

相关问题