xml - 在 Swift 中使用 NSXMLParser 时访问元素的值

标签 xml swift xml-parsing nsxmlparser

我正在尝试解析 http://apps.wku.edu/iwku/maps/buildings/data/SouthCampus-Buildings.xml 上的 XML

在 Swift Playground 中使用以下代码

import UIKit

var str = "Hello, playground"

class Parse: NSObject, NSXMLParserDelegate{

func beginParse(){        
    let url = NSURL(string: "http://apps.wku.edu/iwku/maps/buildings/data/SouthCampus-Buildings.xml")
    var xml = NSXMLParser(contentsOfURL: url)

    xml?.delegate = self
    xml?.parse()
}

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: NSDictionary!) {
    println("Element's name is \(elementName)")
    println("Element's attributes are \(attributeDict)")
    }
}

var instance = Parse()

instance.beginParse()

不幸的是,我在控制台中的输出如下所示: enter image description here

为什么我的 attributeDict 看起来是空的,我怎样才能访问与这些元素关联的值?

最佳答案

使用 NSXMLParser 解析 XML 文件并不像您在这里期望的那么容易。您必须实现 NSXMLParserDelegate 协议(protocol)中的几种方法来捕获事件。您已经为 didStartElement 做了这件事,它给出了(对我来说)预期的结果:元素名称及其属性(上面链接的 XML 文件中没有属性)。

一切正常...到目前为止。

现在您已经捕获了一个元素的开始,您必须注意进一步的处理:

  • 协议(protocol)方法 foundCharacters 在元素的开始和结束之间触发。也许好几次。您必须实现该方法并将找到的字符附加到字符串变量,具体取决于元素的名称。

  • didEndElement 被触发时,您的字符串变量将被元素的内容完全填充

如果 XML 文件具有深层层次结构,事情可能会变得越来越复杂。

很抱歉这个宽泛的答案,但不幸的是没有使用那个 XML 文件并给我一个深度嵌套的字典NSXMLParser 的方法。

关于xml - 在 Swift 中使用 NSXMLParser 时访问元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511576/

相关文章:

xml - 从 xsd 生成 xml

android - 使用 android 中的 DOM 解析器解析存储在内部存储器中的 XML 文件。

Ios Swift 添加带有过渡/效果的 UIImageView

ios - Swift 5/Xcode 11 更新后模拟器在动画 block 处卡住

java - 如何在 JAVA 中使用 STAX 解析器读取标签内的值

c# - 连同数据一起序列化 XmlDoc 注释

java - Android 中的 Squircle 与 Java Canvas

swift - Xcode UI 测试 如何处理 UNUserNotificationCenter 生成的通知权限

xml-parsing - Golang XML Unmarshal 和 time.Time 字段

android - 您建议客户使用 JSON 还是 XML?为什么?