【问题标题】:How to check for enclosure tag with C# Console multiple rss Feed reader如何使用 C# 控制台多个 rss Feed 阅读器检查附件标签
【发布时间】:2017-07-13 18:51:24
【问题描述】:

我创建了 C# 控制台应用程序,它读取多个 RSS Feed url,然后取值并放入数据库。

现在我在使用 wordpress rss feed 生成器时遇到问题,其中文章图像带有标签 enclosure

如果在源代码中存在附件,如何获取和解析文章图像 url,我使用我的代码读取 description 标签中的所有图像 url。

这是我在数据库中读写的代码:

using (var xmlReader = XmlReader.Create(izvorURLX))
{
    var rssFormatter = new Rss20FeedFormatter();
    rssFormatter.ReadFrom(xmlReader);
    foreach (SyndicationItem syndicationItem in rssFormatter.Feed.Items)
    {
    Console.OutputEncoding = Encoding.UTF8;
    string link = syndicationItem.Links[0].Uri.ToString();
    var statCat1 = Convert.ToString((""));
    foreach (var kategorija in syndicationItem.Categories.Take(1))
    {
    statCat1 = (kategorija.Name);  
    }
    var rr = syndicationItem.AttributeExtensions.Values;
    var LastIZV1 = rssFormatter.Feed.LastUpdatedTime.DateTime;
    var SiteTitle = rssFormatter.Feed.Title.Text;
    var itemFD = Convert.ToString(syndicationItem.Summary.Text);
    string clitemFD = Regex.Replace(itemFD, @"<[^>]*>", String.Empty, RegexOptions.IgnoreCase).Trim();
    var ItemItem = Convert.ToString(rssFormatter.Feed.Items);
    var ff = rssFormatter.Feed.Items.ToString();
    var datumIZV0 = syndicationItem.PublishDate.DateTime;
    var nula = Convert.ToDateTime("01.01.0001 00:00:00");
    var datumIZVX = Convert.ToDateTime(DateTime.Now);
     if (datumIZV0 == nula)
    {
    datumIZVX = Convert.ToDateTime(DateTime.Now);
    }
     else
    {
    datumIZVX = Convert.ToDateTime(datumIZV0);
    }
    XmlDocument doc = new XmlDocument();
    doc.Load(izvorURLX);
    var imgSRC = Convert.ToString("");
    var reg1 = new Regex("src=(?:\"|\')?(?<imgSrc>[^>]*[^/].?:bmp|jpg|jpeg|gif|png))(?:\"|\')?");
    var match1 = reg1.Match(itemFD);
    if (match1.Success)
     {
     Uri UrlImage = new Uri(match1.Groups["imgSrc"].Value, UriKind.Absolute);
    imgSRC = UrlImage.ToString();
    }
    var feedXML = Convert.ToString(izvorURLX);
    int KatX = Convert.ToInt32(KatIzv);
    var statTitle = Convert.ToString(syndicationItem.Title.Text);
    var statLink = Convert.ToString(syndicationItem.Links[0].Uri);
    SqlConnection conn = new SqlConnection("Server=localhost\\SQLEXPRESS;Database=RSSFeedAgregator;Integrated Security=true");
    conn.Open();
    var FeedID = Convert.ToInt32(0);
    var LastinDB = Convert.ToDateTime("01.01.0001 00:00:00");
    string FeedInDB = Convert.ToString("a");
    using (SqlCommand cmdX2 = new SqlCommand("SELECT Feed_ID, Izvor, LastUpd, feed, Kategorija, iID, izvTitle, statCat FROM [dbo].[tbl_feeds]", conn))
    {
    SqlDataReader readerX = cmdX2.ExecuteReader();
    while (readerX.Read())
    {
    Console.OutputEncoding = Encoding.UTF8;
    var feedTxt = Convert.ToString(readerX["feed"]);
    FeedID = Convert.ToInt32(readerX["Feed_ID"]);
    LastinDB = Convert.ToDateTime(readerX["LastUpd"]);
    FeedInDB = Convert.ToString(readerX["feed"]);
    }
    readerX.Close();
    }
     bool inList = DB.Contains(clitemFD);
     var statIMG = Convert.ToString("");
     if (inList == false)
     {
    Console.WriteLine("false: Ne postoi");
    using (SqlCommand cmd1 = new SqlCommand("INSERT INTO tbl_feeds VALUES (" + "@Izvor, @LastUpd, @feed, @Kategorija, @iID, @izvTitle, @statCat, @statTitle, @statLink, @statImage)", conn))
    {
    cmd1.Parameters.AddWithValue("@Izvor", feedXML);
    cmd1.Parameters.AddWithValue("@LastUpd", datumIZVX);
    cmd1.Parameters.AddWithValue("@feed", clitemFD);
    cmd1.Parameters.AddWithValue("@Kategorija", KatX);
    cmd1.Parameters.AddWithValue("@iID", IzvID);
    cmd1.Parameters.AddWithValue("@izvTitle", SiteTitle);
    cmd1.Parameters.AddWithValue("@statCat", statCat1);
    cmd1.Parameters.AddWithValue("@statTitle", statTitle);
    cmd1.Parameters.AddWithValue("@statLink", statLink);
    cmd1.Parameters.AddWithValue("@statImage", imgSRC);
    int rows = cmd1.ExecuteNonQuery();
    Console.WriteLine("Uspesno dodadeno nov zapis !");
     }
    conn.Close();
    }
    else
    {
    Console.WriteLine("true: Postoi");
    }
    }  
    }

对不起,我的长代码,但我更容易理解,我希望任何人都可以帮助我。

更新

我也找到了这段代码,这段代码读取附件 URL,但只是重复阅读,如果源有 10 篇文章,这段代码读取 10 次所有 10 个 img url,并在数据库中保存最后一个。

XmlNodeList items = doc.SelectNodes("//item") ;

for (int i = 0; i < items.Count; i++)
{
var   encImg = (items[i].SelectSingleNode("enclosure").Attributes["url"].Value);
}

任何人都可以修改此代码以工作属性?

【问题讨论】:

  • 不要那样做。您需要使用 HTML 解析器。
  • 另外,您的Convert.ToString 电话毫无意义。
  • 使用 First() 而不是你奇怪的循环。
  • 我不是专家,你能写代码如何调用附件标签吗?因为我的代码从来没有定义外壳阅读。谢谢
  • Convert.ToString 是因为我将所有值作为字符串放入数据库中,然后我也将其读取为字符串,而不是 XML 文件。

标签: c# .net xpath console xelement


【解决方案1】:

老实说,我不能很好地理解你的代码,所以我建议你将你的代码制表/排序。

为此,您可以使用 Ctrl+K+ Ctrl+D。

您可以查看更多快捷方式here


这样一说,你就可以用这行代码轻松找到附件的url了:

string link = "";
foreach (SyndicationItem syndicationItem in rssFormatter.Feed.Items)
{
    Console.OutputEncoding = Encoding.UTF8;
    // You have to check if `syndicationItem.Links` has more than 1 element.
    if (syndicationItem.Links.Count > 0)
    {
        // this is the line that shows you the url of the "enclosure" tag:
        link = syndicationItem.Links[1].Uri.ToString();
    }

    // Prints the Image's src.
    Console.WriteLine("Image src: " + link);
}

前面的代码打印我:

Image src: http://a1on.mk/wp-content/uploads/2017/07/turcija-ucenici.jpg
Image src: http://a1on.mk/wp-content/uploads/2017/07/vlada-18juli.jpg
Image src: http://a1on.mk/wp-content/uploads/2017/07/tomas-greminger.jpg
Image src: http://a1on.mk/wp-content/uploads/2014/08/toplo.jpg
Image src: http://a1on.mk/wp-content/uploads/2017/06/grncarov.gif
Image src: http://a1on.mk/wp-content/uploads/2015/04/uprava-finansiska-policija.gif
Image src: http://a1on.mk/wp-content/uploads/2017/05/pritvor-turska.jpg
Image src: http://a1on.mk/wp-content/uploads/2017/07/kosarkari-do20.jpg
Image src: http://a1on.mk/wp-content/uploads/2017/07/vardar-fk-nat.jpg
Image src: http://a1on.mk/wp-content/uploads/2017/07/burgas.jpg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多