XML 解析快速访问 attributeDict

标签 xml swift parsing

如何访问解析器函数中的 AttributeDict 来获取列(名称、简短和日期)? (代码如下)我尝试了一些方法,但它不起作用,也没有从谷歌找到任何帮助。

这是 xml 文件:

<?xml version="1.0" encoding="windows-1257"?>
<timetable ascttversion="2015.5.5" importtype="database" options="daynumbering1,idprefix:Oman" displayname="Oman XML" displaycountries="om" displayinmenu="0">


   <days options="canadd,canremove,canupdate,silent" columns="name,short,day">

      <day name="Esmasp‰ev" short="Es" day="1"/>
      <day name="Teisip‰ev" short="Te" day="2"/>
      <day name="Kolmap‰ev" short="Ko" day="3"/>
      <day name="Neljap‰ev" short="Ne" day="4"/>
      <day name="Reede" short="Re" day="5"/>
   </days>
</timetable>

这是函数:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
    elementName
    print("\(elementName)")
//    if attributeDict == ["Name" : "Esmaspäev"] {
//        print("\(attributeDict)")
//    }
    if elementName == "day"
    {
        if elementName == "day"{
            passName=true;
        }
        passData=true;
    }
}

最佳答案

import Fuzi

func parse() {
    do {
        // Read the xml file as String
        guard 
            let path = NSBundle.mainBundle().pathForResource("arvestusDays", ofType: "xml")
        else {
            print("XML file does not exist.")
            return
        }
        let xmlString = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding)

        // Parse the xml string
        let doc = try XMLDocument(string: xmlString)

        if let days = doc.root.firstChild(tag: "days") {
            for day in days.children {
                print(day["name"])
                print(day["short"])
                print(day["day"])
            }
        }
    } catch let error {
        print(error)
    }
}

我现在没有 Mac,所以无法运行来测试它,但这段代码应该可以工作。如果没有,请发表评论。

更新:

如果遇到编码问题,请尝试从 NSData 而不是 String 创建 XMLDocument:

        let xmlData = NSData(contentsOfFile: path)

        // Parse the xml string
        let doc = try XMLDocument(data: xmlData!)

关于XML 解析快速访问 attributeDict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33597398/

相关文章:

xml - XML 规范是否规定了有关元素顺序的内容?

ios - 从 swift 派生的 obj-c 类的类别

ios - 如何使用自定义标题将单元格排列成部分?

ios - Try and catch 不抛出消息并处理问题

php - 在 php 中的 foreach 循环中使用 while 循环执行 mysql 查询

java - Xalan with Java 6 会跳过注释吗?

XML 差异 : How to generate XML diff using XSLT?

java - 在java中拆分解析文本文件

python - 需要从脚本标签 HTML Python 中提取所有链接

javascript - 我要制作一个解析器,我想学习正确的解析