Мне нужно получить информацию с комического сайта, нет доступа к JSON-решению, только XML.
На сайте есть страница "Газетный киоск" и RSS-канал "Газетный киоск".
Я пытаюсь разобрать информацию из обоих источников.
Проблемы с использованием ссылки RSS:
- Я получаю два отдельных результата заголовка на консоли для одного и того же тега после n ° 100, но должен быть в одной строке "Raccolta Zagor n ° 239", а не как здесь ниже:
found title: Raccolta Zagor n
found title: °239
found link: https://www.sergiobonelli.it/scheda/39486/Raccolta-Zagor-n-238.html
adding: nil
- кажется, что массив не может быть заполнен, поэтому таблица не может быть обновлена
Проблемы при использовании ссылки на страницу
- не могу проанализировать страницу, я не могу понять, могу ли я анализировать такую веб-страницу или нет.
ссылки:
static let linkRSS = "https://www.sergiobonelli.it/rss.jsp?sezione=311"
static let linkNewstandFromWebPage = "https://www.sergiobonelli.it/sezioni/43/in-edicola"
мой пост / класс комиксов:
class Post {
var titolo : String
var link : String
init() {
self.postTitle = ""
self.link = ""
}
}
мой парсер:
class XMLParserController: NSObject, XMLParserDelegate {
var parser : XMLParser!
var currentPost: Post?
var posts : [Post] = []
var currentTagParsed = ""
var isParsingItem = false
init(url: URL) {
super.init()
self.parser = XMLParser(contentsOf: url)!
self.parser.delegate = self
}
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
if elementName == "item" {
self.isParsingItem = true
return
}
if self.isParsingItem == true {
if elementName == "title" || elementName == "link" {
self.currentTagParsed = elementName
}
}
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
if self.currentTagParsed == "title" {
self.currentPost?.postTitle += string
print("found title: \(string)")
}
if self.currentTagParsed == "link" {
self.currentPost?.link += string
print("found link: \(string)")
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
self.currentTagParsed = ""
if elementName == "item" {
self.isParsingItem = false
print("adding: \(String(describing: self.currentPost?.postTitle))")
guard currentPost != nil else {return}
self.posts.append(currentPost!)
self.currentPost = Post.init()
}
}
}
мой контроллер
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var myTable: UITableView!
let parserController = XMLParserController.init(url: URL.init(string: AllLinks.linkRSS)!)
override func viewDidLoad() {
super.viewDidLoad()
let resultFromClass = self.parserController.parser.parse()
if resultFromClass == true {
self.myTable.reloadData()
print(resultFromClass)
}
print("items count: \(parserController.posts.count)")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return parserController.posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)
cell.textLabel?.text = parserController.posts[indexPath.row].postTitle
return cell
}
}