XMLParser:在Swift中使用RSS feed

您肯定在每个博客,传统媒体网站以及许多其他地方都看到过此图标。 那是因为它代表了开放信息传播的相当流行的标准。 RSS最初被称为RDF网站摘要,但通常被称为Really Simple Syndication,它是一种用于提供定期更改的Web内容的格式。

RSS文件包含有关提要的静态信息以及动态项目。 这些项目通常是新闻文章或博客条目,但它们可以涉及任何可通过Web访问的内容 。 每个项目都位于一个 (或 )标签内,并包含一个标题 ,一个URL和一个发布日期

您可能知道RSS只是XML的一种形式,它本身是一种简单的标记语言。 XML元素是由标记设置的值,该标记是三种类型之一:

  1. 开始标记,用于标记值的开始(例如 )。
  2. 结束标记,以标记值的结束( )。
  3. “空元素”标签,其中可能包含值作为属性( )。

RSS feed具有明确定义的格式。 在描述新闻网站或“频道”的一些标题信息之后,RSS提要在...元素内显示单独的新闻项。 每个新闻项都包含标题,链接,发布日期,完整描述和其他字段。

xmlParser表示将执行所有工作的实际解析器对象currentElement保存当前XML标签的值,而foundCharacters表示所述标签的值,即,标签封装的字符。 由于每个item / entry元素都包含多个属性,因此我们在currentData变量中重构每个提要项目。 并且由于提要中有很多文章,一旦我们完成了单个元素的所有组件并开始解析下一个元素的内容, parsedData完整的条目附加到parsedData ,它代表了单个RSS提要的整体。 最后, isHeader是一个标志,可让我们知道我们是在解析实际的提要项还是其标头(还具有标题,描述等)。

此过程从解析器的startParsingWithContentsOfURL(_:_:)方法开始。 它实例化实际的解析器对象,将类实例设置为解析器委托,并开始解析给定URL的内容。 在解析RSS Feed时,我们会将每个不同的条目附加到parsedData 。 但是,由于这是在parser(_:didStartElement:_:_:_:) ,因此我们总是删除提要的最后一个条目。 为了解决这个问题,我们将currentData附加到parsedData startParsingWithContentsOfURL(_:_:)中的startParsingWithContentsOfURL(_:_:)因为我们知道此currentData代表最后一个feed元素。 最后,我们使用完成处理程序来确保我们不会试图过早地传递parsedData

调用startParsingWithContentsOfURL(_:_:) ,我们的解析器将调用一系列方法,第一个是parser(_:didStartElement:_:_:_:) 。 在这里,我们将currentElement设置为elementName的值,该值表示RSS提要中的标记名称。 在我们的案例中,我们对所有itementry标签都感兴趣。 isHeader标志允许我们跳过不相关的条目,并帮助我们进行媒体URL捕获。

parser(_:foundCharacters:)处理我们感兴趣的字符串,即,将所需条目的字符串值附加到RSSParser 实例 属性 foundCharactersdeleteHTML(tags:)使用正则表达式从发现的字符中删除内联HTML标签。

最后, parser(_:didEndElement:_:_:)查看元素的结束标记。 在这里,我们删除所有空格和换行符,然后向currentData添加新的键值对。 瞧!

现在您是一位认证的主持人。 不。

有了我们的设置,一旦解析器遍历了整个XML文件,我们将在parsedData拥有所有相关且格式正确的条目。 那时,天空才是极限!

有用的链接:

什么是RSS? RSS解释– www.WhatIsRSS.com
一页式快速介绍RSS,为什么有用,以及如何访问RSS源。 www.whatisrss.com XMLParser –基础| Apple开发人员文档
此类的实例以事件驱动的方式解析XML文档(包括DTD声明)。 NSXMLParser… developer.apple.com iOS的XML教程:如何为iPhone项目选择最佳的XML解析器
在iPhone上解析XML时,有很多选择。 iPhone SDK带有两个不同的…… www.raywenderlich.com 梅德韦杰夫/ RSS阅读器
通过在GitHub上创建一个帐户来促进rss-reader开发。 github.com