ios - 我需要用 XMLparser 和 swift 解析 xml
问题描述
我正在尝试使用 XMLparser 快速解析来自服务器的 xml 文件,
我有一个 var m_items 是一个 NSMutableArray 和一个 CItemData 对象
var m_id:String = ""
var m_type:CLong = CLong(0)
var m_title:String = ""
var m_description:String = ""
var m_data:String = ""
override init()
{
super.init();
}
init(id: String, title:String, type:CLong) {
self.m_id = id;
self.m_title = title;
self.m_type = type;
这是带有项目根、项目 ID 和一些值(如标题、描述和数据)的 xml。
<items>
<item id="1" type="1">
<title>
<![CDATA[ Definition of Hacker ]]>
</title>
<description>
<![CDATA[ Description 1 ]]>
</description>
<data>
<![CDATA[ Data 1 ]]>
</data>
</item>
</items>
我试图像这样解析,但我不明白如何正确使用 didstartelement 。有什么帮助吗?我的代码来自一个示例,但不符合我的需求。问题是
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
var attr:String = ""
if(elementName == "items")
{
self.m_root = CItemData();
self.m_last_node = self.m_root;
}
else if(elementName == "item")
{
attr = attributeDict["id"]!
let item:CItemData = CItemData()
item.m_id.setObject(attr , forKey: "id" as NSCopying)
self.m_root?.m_id.add(item)
self.m_last_item = item;
self.m_last_node = item;
}
else if(elementName == "child")
{
attr = attributeDict["id"]!
let child:CItemData = CItemData()
child.m_type.setObject(attr , forKey: "id" as NSCopying)
self.m_last_item?.m_type.add(child)
self.m_last_node = item;
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if(elementName == "title")
{
self.m_last_node?.m_title = self.m_last_string
}
else if(elementName == "description"){
self.m_last_node?.m_description = self.m_last_string
}
else if(elementName == "data"){
self.m_last_node?.m_data = self.m_last_string
}
}
func parser(_ parser: XMLParser, foundCharacters string: String)
{
self.m_last_string = string;
}
}
解决方案
推荐阅读
- python - 如何使用我的语音(没有文本)从文本文件中提取一行?
- javascript - LocalHost 未重新加载并在保存时崩溃
- sas - 带有数组的 SAS libname json
- python - 操作数不能与形状 (0,) (1,1,3) 一起广播
- sql - 从 SQL Server 中的字符串转换日期和/或时间
- mysql - 在 WHERE 语句列名中使用变量
- html - 即使在静音和遵守不同的浏览器规则后,自动播放也不适用于 html 视频
- perl - perl中拆分语法中缺少表达式
- python - 如何将实例绑定描述符作为引用参数传递给函数?
- xcode - 如何在不使用 Xcode 的情况下导出 Apple Developer Id 证书