【发布时间】:2016-02-10 16:08:17
【问题描述】:
我有以下要解析的 XML 结构:
<plist version="1.0">
<dict>
<key>
PALABRA
</key>
<array>
<string>
CATEGORY
</string>
<string>
WORD
</string>
</array>
</dict>
</plist>
我正在使用 NSXMLParser 以这种方式解析 XML:
var posts = NSMutableArray()
var parser = NSXMLParser()
var elements = NSMutableDictionary()
var element = NSString()
var CATEGORY = NSMutableString()
var WORD = NSMutableString()
func parseXML() {
posts = []
parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://www.serverbpw.com/cm/2016-1/hangman.php"))!)!
parser.delegate = self
parser.parse()
}
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
element = elementName
if (elementName as NSString).isEqualToString("array") {
elements = NSMutableDictionary()
elements = [:]
categoria = NSMutableString()
categoria = ""
}
if (elementName as NSString).isEqualToString("string") {
palabra = NSMutableString()
palabra = ""
}
}
func parser(parser: NSXMLParser, foundCharacters string: String) {
if element.isEqualToString("string") {
categoria.appendString(string)
}
if element.isEqualToString("string") {
palabra.appendString(string)
}
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if (elementName as NSString).isEqualToString("array") {
if !categoria.isEqual(nil) {
elements.setObject(categoria, forKey: "CATEGORIA")
}
if !palabra.isEqual(nil) {
elements.setObject(palabra, forKey: "PALABRA")
}
posts.addObject(elements)
}
}
我从服务器获取的CATEGORY的值是CATEGORY的内容,也是WORD的内容,而WORD的值只是WORD的内容。 我知道这不是解析 XML 的正确方法。问题是我不知道如何获取 CATEGORY 和 WORD 元素,因为它们都具有相同的 ID(“字符串”)。获取此信息的正确方法是什么?
服务器地址为:http://www.serverbpw.com/cm/2016-1/hangman.php
提前致谢!
【问题讨论】:
-
顺便说一句,我不鼓励将
NSXMLParser(contentsOfURL)与远程URL 一起使用。这会导致同步网络调用并阻塞主线程。最好异步检索数据,然后使用NSXMLParser引用本地文件或异步下载数据的NSData。
标签: ios xml swift parsing nsxmlparser