首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >XML解析器仅加载第一个对象

XML解析器仅加载第一个对象
EN

Stack Overflow用户
提问于 2017-07-05 03:24:20
回答 1查看 168关注 0票数 0

我有一个xml parser,但是解析器中的函数能够获取xml文件的第一个对象,但不能将xml文件的所有类别都放入mutable array。下面是函数:

代码语言:javascript
代码运行次数:0
运行
复制
    let xmlparser = XmlParser()
    xmlparser.loadRssFeed("FaceMask")
    faceMaskArray = (xmlparser.faceMaskArray.firstObject as! FaceMaskCategories).faceMaskItemArray
    collectionArray = faceMaskArray

我的xml文件就是这样的

代码语言:javascript
代码运行次数:0
运行
复制
    <?xml version="1.0" encoding="utf-8"?>
<facemasks>
    <categories>
        <category >
            <id>0</id>
            <title>Animals</title>
            <image_name> leopard</image_name>
            <items>

                <item>
                    <landmarks_file_name>leopard</landmarks_file_name>
                    <item_id>1101</item_id>
                    <mask_title>leopard</mask_title>
                    <mask_image_name>leopard.png</mask_image_name>
                </item>

            </items>
        </category>
        <category >
            <id>1</id>
            <title>Animal</title>
            <image_name>leopard</image_name>
            <items>
                <item>
                    <landmarks_file_name>leopard</landmarks_file_name>
                    <item_id>1102</item_id>
                    <mask_title>leopard</mask_title>
                    <mask_image_name>leopard.png</mask_image_name>
                </item>
            </items>
        </category>
        <category >
            <id>2</id>
            <title>Animals</title>
            <image_name>tiger</image_name>
            <items>
                <item>
                    <landmarks_file_name>leopard</landmarks_file_name>
                    <item_id>1103</item_id>
                    <mask_title>tiger</mask_title>
                    <mask_image_name>tiger.png</mask_image_name>
                </item>
            </items>
        </category>
        <category >
            <id>3</id>
            <title>Animals</title>
            <image_name>tiger</image_name>
            <items>
                <item>
                    <landmarks_file_name>leopard</landmarks_file_name>
                    <item_id>1104</item_id>
                    <mask_title>tigerz</mask_title>
                    <mask_image_name>tiger.png</mask_image_name>
                </item>
            </items>
        </category>
    </categories>
</facemasks>

该函数仅从xml file中正确获取第一个或最后一个对象。谁能指导我如何才能正确地从xml文件中获得所有类别。我真的很感谢你的帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 04:48:18

检查以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
func beginParsing()
{
posts = []
parser = NSXMLParser(contentsOfURL:
(NSURL(string:"http://images.apple.com/main/rss/hotnews/hotnews.rss"))!)!
parser.delegate = self
parser.parse()
tbData!.reloadData()
}

下面是获得整个数组的解析器函数:

代码语言:javascript
代码运行次数:0
运行
复制
func parser(parser: NSXMLParser, didStartElement elementName: String, 
namespaceURI: String?, qualifiedName qName: String?, attributes 
attributeDict: [String : String])
{
element = elementName
if (elementName as NSString).isEqualToString("item") // Replace this item with category.
{
elements = NSMutableDictionary()
elements = [:]
title1 = NSMutableString()
title1 = ""
date = NSMutableString()
date = ""
}
}

它从数组中获取所有项," item“实际上是标记或数组中的每个项,就像示例XML中的"category”一样。

这是示例XML:

http://images.apple.com/main/rss/hotnews/hotnews.rss#sthash.1Mq673bO.dpuf

并解析来自每一项的数据:

代码语言:javascript
代码运行次数:0
运行
复制
func parser(parser: NSXMLParser!, foundCharacters string: String!)
{
 if element.isEqualToString("title") {
title1.appendString(string)
} else if element.isEqualToString("pubDate") {
date.appendString(string)
}
}

我正在使用这个教程,它工作得很好:

http://www.theappguruz.com/blog/xml-parsing-using-nsxmlparse-swift

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44912926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档