解析XML并将其附加到结构上-如何正确访问结构变量?

时间:2018-09-25 20:14:37

标签: ios swift

我有一个用XMLParser解析的xml文件,并将值附加到一个struc上。但是,我很难获得这些值。到目前为止,这是我作为初学者所了解的。

这是我的结构。它有5个空变量,我将在以后获取。

struct CalendarDates {
    var month = ""
    var date = ""
    var datenumber = ""
        var holiday = ""
        var description = "" }

接下来,这是我使用XMLParser将值分配给struct

的地方
class ViewController: UIViewController, XMLParserDelegate {

var myCalendarDatesStrut = [CalendarDates]()
var calendarEventsFromXML = ""
var monthsFromXML = ""
var datesFromXML = ""
var datenumbersFromXML = ""
var holidaysFromXML = ""
var descriptionsFromXML = ""

//Mark: XML Parse Delegate
extension CalendarViewController {
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
    calendarEventsFromXML = elementName
}

func parser(_ parser: XMLParser, foundCharacters string: String) {
    let data = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
    if data.count != 0 {
        switch calendarEventsFromXML
        {
        case "month": monthsFromXML = data
        case "date": datesFromXML = data
        case "datenumber": datenumbersFromXML = data
        case "holiday": holidaysFromXML = data
        default: break
        }}}

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if elementName == "calendarevent"
    {
        var myCalendarDates = CalendarDates()
        myCalendarDates.month = monthsFromXML
        myCalendarDates.date = datesFromXML
        myCalendarDates.datenumber = datenumbersFromXML
        myCalendarDates.holiday = holidaysFromXML
        myCalendarDatesStrut.append(myCalendarDates)
    }}}}

好的,这就是我遇到的一个问题。我想获取所有日期(datesFromXML),以便可以将它们与一些可见的Date匹配并执行一些方法。

我尝试了

let datesFromCalendarXML = myCalendarDatesStrut.date

但这给我一个错误类型'[CalendarDates]'的值没有成员'date'。解析xml时,是否没有将这些附加到此struc?我做错了吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试

let datesFromCalendarXML = myCalendarDatesStrut.map {$0.date} // this gives [Date]

由于myCalendarDatesStrut是一个数组而不是单个对象,因此您不能对其使用点运算符,之后您就可以过滤该数组

let date1 = //
let date2 = //
let result = datesFromCalendarXML.filter { $0 > date1 && $0 < date2 } // filter to whatever you want