Почему синтаксический анализ XML-файла в Swift 4 вернется неполным?

Поэтому вот коды, которые я использовал для разбора xml, и тексты, которые я получил в печати и в табличном представлении, были неполными

func parser(_ parser: XMLParser, foundCharacters string: String) {
    let data = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

    print(data)
    if data.count != 0 {
        switch termsItem {

        case "title" : termsTitle = data
        case "body" : termsTexts = data
            default :
            break


        }


    }
}

и я изменяю этот код на это ниже, и теперь печать XML является правильным, но я не вижу ничего в табличном представлении

func parser(_ parser: XMLParser, foundCharacters string: String) {
    let data = string

    print(data)
    if data.count != 0 {
        switch termsItem {

        case "title" : termsTitle = data
        case "body" : termsTexts = data
            default :
            break


        }


    }
}

вот другие коды но я их не менял

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {


    termsItem = elementName

}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {


    if elementName == "item" {

        var theItems = Item()
        theItems.title = termsTitle
        theItems.body = termsTexts
        print(theItems)
        print(theItems.title)
        print(termsTitle)
        tableViewterms.append(theItems)

    }

    DispatchQueue.main.async {

        self.otherTopicsTableView.reloadData()



    }

  }
}

1 ответ

Решение

Поэтому мне пришлось добавить данные, а затем удалить их, теперь этот код работает хорошо

 func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {

    termsItem = elementName

}

func parser(_ parser: XMLParser, foundCharacters string: String) {
    let data = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

    if data.count != 0 {
        switch termsItem {

        case "title" : termsTitle = data
        case "body" : termsTexts.append(contentsOf: data)
            default :
            break

        }
    }
}


func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {


    if elementName == "item" {

        var theItems = Item()
        theItems.title = termsTitle
        theItems.body = termsTexts
        print(theItems.body)
        termsTexts.removeAll()
        tableViewterms.append(theItems)

    }

    DispatchQueue.main.async {

        self.otherTopicsTableView.reloadData()

    }

}
Другие вопросы по тегам