无法使用 SWIFT 2 从附件标签 rss xml 中提取 url 值
Unable to extract url value from enclosure tag rss xml with SWIFT 2
我在提取 RSS Feed 中附件标签的 url 内容时遇到困难。我正在开发 Xcode 7 Swift 2.
我的NSXML委托解析代码如下:
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
eName = elementName
if elementName == "item" {
postTitle = String()
postLink = String()
postDate = String()
postImageUrl = String()
}
}
下面是负责解析RSS XML feed
的相关源码
func parser(parser: NSXMLParser, foundCharacters string: String) {
let data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
if (!data.isEmpty) {
print("eName Start")
print(eName)
print(data,"DATAAAA")
print("eName END")
if eName == "title" {
postTitle += data//TEST OK
} else if eName == "link" {
postLink += data//TEST OK
} else if eName == "pubDate" {
postDate += data//TEST OK
}
else if eName == "enclosure"{
print(data)//THIS IS EMPTY WHY !?
print("enc details")
postImageUrl += data
}
}
}
如上所述,我能够从 RSS Feed 中提取 "title" 、 "pubDate" 和 "link" 标签,但不能提取附件标签。
当我尝试在检测到 "enclosure" 时转储数据时,返回的数据为空。
我怀疑问题在于我没有正确过滤 RSS 对象的这行代码。
let data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
RSS 源的来源是:www.securitymagazine.com/rss/15
有人可以对此提供一些见解吗?我非常感激 !
RSS中的"enclosure"元素是这样的:
<enclosure url="http://www.securitymagazine.com/ext/resources/SEC/2016/0616/Boschdata.jpg?1467317413" type="image/jpeg" length="280480"/>
url 作为元素的属性包含在内,而不是开始标记后的字符 (#text) 数据。您可以在 parser(_:didStartElement:...)
方法中访问元素属性。所以,你需要像这样修改方法:
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
eName = elementName
switch elementName {
case "item":
postTitle = String()
postLink = String()
postDate = String()
postImageUrl = String()
case "enclosure":
if let urlString = attributeDict["url"] {
//...use `urlString` appropriately
print(urlString)
print("enc details")
postImageUrl += urlString
} else {
print("malformed element: enclosure without url attribute")
}
//...cases for other element name
default:
//...
break
}
}
我在提取 RSS Feed 中附件标签的 url 内容时遇到困难。我正在开发 Xcode 7 Swift 2.
我的NSXML委托解析代码如下:
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
eName = elementName
if elementName == "item" {
postTitle = String()
postLink = String()
postDate = String()
postImageUrl = String()
}
}
下面是负责解析RSS XML feed
的相关源码func parser(parser: NSXMLParser, foundCharacters string: String) {
let data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
if (!data.isEmpty) {
print("eName Start")
print(eName)
print(data,"DATAAAA")
print("eName END")
if eName == "title" {
postTitle += data//TEST OK
} else if eName == "link" {
postLink += data//TEST OK
} else if eName == "pubDate" {
postDate += data//TEST OK
}
else if eName == "enclosure"{
print(data)//THIS IS EMPTY WHY !?
print("enc details")
postImageUrl += data
}
}
}
如上所述,我能够从 RSS Feed 中提取 "title" 、 "pubDate" 和 "link" 标签,但不能提取附件标签。 当我尝试在检测到 "enclosure" 时转储数据时,返回的数据为空。
我怀疑问题在于我没有正确过滤 RSS 对象的这行代码。
let data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
RSS 源的来源是:www.securitymagazine.com/rss/15
有人可以对此提供一些见解吗?我非常感激 !
RSS中的"enclosure"元素是这样的:
<enclosure url="http://www.securitymagazine.com/ext/resources/SEC/2016/0616/Boschdata.jpg?1467317413" type="image/jpeg" length="280480"/>
url 作为元素的属性包含在内,而不是开始标记后的字符 (#text) 数据。您可以在 parser(_:didStartElement:...)
方法中访问元素属性。所以,你需要像这样修改方法:
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
eName = elementName
switch elementName {
case "item":
postTitle = String()
postLink = String()
postDate = String()
postImageUrl = String()
case "enclosure":
if let urlString = attributeDict["url"] {
//...use `urlString` appropriately
print(urlString)
print("enc details")
postImageUrl += urlString
} else {
print("malformed element: enclosure without url attribute")
}
//...cases for other element name
default:
//...
break
}
}