Ios 如何访问grand child元素?

Ios 如何访问grand child元素?,ios,swift4,xmlmapper,Ios,Swift4,Xmlmapper,我正在尝试学习XMLMapper,所以我想用我的W3学校关于书籍的XML示例来尝试自己映射它们 所以我试着从一系列书籍中打印标题,作者 Books.XML <?xml version="1.0" encoding="utf-8"?> <bookstore> <book> <title>Everyday Italian</title> <author>Giada De Laurentii

我正在尝试学习XMLMapper,所以我想用我的W3学校关于书籍的XML示例来尝试自己映射它们

所以我试着从一系列书籍中打印标题,作者

Books.XML

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
    <book>
        <title>Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book>
        <title>Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book>
        <title>XQuery Kick Start</title>
        <author>James McGovern</author>
        <author>Per Bothner</author>
        <author>Kurt Cagle</author>
        <author>James Linn</author>
        <author>Vaidyanathan Nagarajan</author>
        <year>2003</year>
        <price>49.99</price>
    </book>
    <book>
        <title>Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
</bookstore>

日常意大利语
吉娅达·德·劳伦蒂斯
2005
30
哈利·波特
J K.罗琳
2005
29.99
XQuery启动
詹姆斯·麦戈文
伯特纳
库尔特·卡格尔
詹姆斯·林恩
瓦迪亚纳坦·纳加拉扬
2003
49.99
学习XML
埃里克·T·雷
2003
39.95
BooksXMLMappable.swift文件:

import Foundation
import XMLMapper

class BookStore: XMLMappable {
    required init?(map: XMLMap) {
        //Empty
    }

    var nodeName: String!

    var books: [Book]?

    func mapping(map: XMLMap) {
        books <- map["book"]

    }

}

class Book: XMLMappable {
    required init?(map: XMLMap) {
        //Empty
    }

    var nodeName: String!

    var title: String!
    var author: String?
    var year: Int?
    var price: Double?


    func mapping(map: XMLMap) {
        //category <- map.attributes["category"]
        title <- map["title"]
        author <- map["author"]
        year <- map["year"]
        price <- map["price"]
    }

}
<代码>导入基础 导入XMLMapper 类书店:XMLMappable{ 必需的初始化?(映射:XMLMap){ //空的 } 变量nodeName:String! var图书:[图书]? func映射(映射:XMLMap){
书籍用于像这样的印刷作者的循环

let storeObject = XMLMapper<BookStore>().map(XMLfile: "books.xml")
for book in storeObject.books {
      print(book.author)
}
let storeObject=XMLMapper().map(XMLfile:“books.xml”)
对于storeObject.books中的书{
印刷品(书籍作者)
}

您在第三本书中的
author
值为零,因为有多个作者

因为您可以使用
数组
映射这些案例

具体来说,您可以使用
字符串的
数组
映射
作者
标记,如:

class Book: XMLMappable {
    required init?(map: XMLMap) {
        //Empty
    }

    var nodeName: String!

    var title: String!
    var authors: [String]?
    var year: Int?
    var price: Double?


    func mapping(map: XMLMap) {
        //category <- map.attributes["category"]
        title <- map["title"]
        authors <- map["author"]
        year <- map["year"]
        price <- map["price"]
    }
}
类目:XMLMappable{
必需的初始化?(映射:XMLMap){
//空的
}
变量nodeName:String!
变量标题:字符串!
var作者:[字符串]?
年份:整数?
var价格:双倍?
func映射(映射:XMLMap){

//分类成功了谢谢,你知道如何删除控制台中的“可选”字吗?不是在(storeObject?.books)中添加解释标记吗?应该删除可选的吗?
class Book: XMLMappable {
    required init?(map: XMLMap) {
        //Empty
    }

    var nodeName: String!

    var title: String!
    var authors: [String]?
    var year: Int?
    var price: Double?


    func mapping(map: XMLMap) {
        //category <- map.attributes["category"]
        title <- map["title"]
        authors <- map["author"]
        year <- map["year"]
        price <- map["price"]
    }
}