如何访问解析器函数中的 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/