У меня есть домашнее задание, нужно прочитать некоторые RSS-каналы и создать профиль пользователя и т. Д.
Моя проблема в том, что когда я использую XMLParser из фонда, я столкнусь с «Операция не может быть завершена. (Ошибка NSXMLParserErrorDomain»)9.) "
Я проверил документацию, и кажется, что у меня есть invalidCharacterError.Я не думаю, что у моего кода есть проблема, так как он хорошо работает для других каналов.Так что я должен сделать, чтобы преодолеть эту проблему?
Вот URL: http://halley.exp.sis.pitt.edu/comet/utils/_rss.jsp?v=bookmark&user_id=3600
PS Этот канал содержит CDATA, поэтому я закомментирую заголовок и описание, но он должен отображать дату, но этопокажи эту ошибку.Поэтому я обеспокоен тем, что во время синтаксического анализа xml он обнаружил недопустимый символ и сообщил об ошибке.В любом случае, чтобы это исправить?Я должен использовать этот URL, хотя.
и некоторый связанный код здесь:
func parseFeed(url: String, completionHandler: (([RSSItem]) -> Void)?)
{
self.parserCompletionHandler = completionHandler
let request = URLRequest(url: URL(string: url)!)
let urlSession = URLSession.shared
let task = urlSession.dataTask(with: request) { (data, response, error) in
guard let data = data else {
if let error = error {
print(error.localizedDescription)
}
return
}
/// parse our xml data
let parser = XMLParser(data: data)
parser.delegate = self
parser.parse()
}
task.resume()
}
// MARK: - XML Parser Delegate
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:])
{
currentElement = elementName
if currentElement == "item" {
currentTitle = ""
currentDescription = ""
currentPubDate = ""
}
}
func parser(_ parser: XMLParser, foundCharacters string: String)
{
switch currentElement {
// case "title": currentTitle += string
// case "description" : currentDescription += string
case "pubDate" : currentPubDate += string
default: break
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
if elementName == "item" {
let rssItem = RSSItem(title: currentTitle, description: currentDescription, pubDate: currentPubDate)
self.rssItems.append(rssItem)
}
}
func parserDidEndDocument(_ parser: XMLParser) {
parserCompletionHandler?(rssItems)
}
func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error)
{
print(parseError.localizedDescription)
}