[Xcode10 实际操作]七、文件与数据-(16)解析XML文档

本文将演示如何解析XML文档。

项目中已添加一份XML文档:worker.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <workers>
 3     <worker id=‘1‘>
 4         <name>Jerry</name>
 5         <age>35</age>
 6         <salary>25600</salary>
 7     </worker>
 8     <worker id=‘2‘>
 9         <name>Stone</name>
10         <age>33</age>
11         <salary>27800</salary>
12     </worker>
13 </workers>

此外还添加了一个实体类,实体类的字段,对应于XML中的元素。

1 import Foundation
2
3 class Worker: NSObject
4 {
5     var id : String = ""
6     var name : String = ""
7     var age : String = ""
8     var salary : String = ""
9 }

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

  1 import UIKit
  2
  3 //首先引入文档的解析代理协议XMLParserDelegate,
  4 //主要的解析工作,都是靠代理来实现的。
  5 class ViewController: UIViewController, XMLParserDelegate {
  6
  7     //为当前的视图控制器类,添加三个属性。
  8     //第一个属性:解析后的对象数组
  9     fileprivate var workers : NSMutableArray! = NSMutableArray()
 10     //第二个属性:当前遍历到的标签名称
 11     fileprivate var currentTag : String!
 12     //第三个属性:正在生成的实体对象
 13     fileprivate var currentWork : Worker!
 14
 15     override func viewDidLoad() {
 16         super.viewDidLoad()
 17         // Do any additional setup after loading the view, typically from a nib.
 18
 19         //从项目的目录结构中,读取等待解析的文档
 20         var xmlPath : String = Bundle.main.path(forResource: "worker", ofType: "xml")!
 21
 22         //添加一条异常捕捉语句,用于读取指定位置上的文件
 23         do
 24         {
 25             //读取指定位置上的文件,
 26             //将读取后的内容,转换为字符串常量,
 27             let xmlContent : NSString! = try NSString(contentsOfFile: xmlPath as String, encoding: 1)
 28             //在控制台打印输出读取的内容
 29             print("\(String(describing: xmlContent))")
 30
 31             //创建一个解析对象,并设置字符的编码模式
 32             let myParse = XMLParser(data: xmlContent.data(using: String.Encoding.utf8.rawValue)!)
 33             //设置解析对象的代理,为当前视图控制器对象
 34             myParse.delegate = self
 35
 36             //开始解析文档
 37             if(!myParse.parse())
 38             {
 39                 //当解析错误时
 40                 //在控制台输出错误日志
 41                 print("\(String(describing: myParse.parserError))")
 42             }
 43         }
 44         catch
 45         {
 46             print("Error.")
 47         }
 48     }
 49
 50     //添加一个代理方法,用来标识解析动作的开始
 51     func parserDidStartDocument(_ parser: XMLParser) {
 52         print("------------ Begin")
 53     }
 54
 55     //添加一个代理方法,用来标识解析动作的结束
 56     //当完成解析任务后,在控制台打印输出最终结果
 57     func parserDidEndDocument(_ parser: XMLParser) {
 58         print("------------ End")
 59         //添加一个循环语句
 60         for i in 0 ..< workers.count
 61         {
 62             //获得数组中的指定索引的对象
 63             let work = workers[i] as! Worker
 64             //在控制台依次打印输出,解析后的各项内容。
 65             print(work.id)
 66             print(work.name)
 67             print(work.age)
 68             print(work.salary)
 69         }
 70     }
 71
 72     //添加一个代理方法,当解析到一个开始标签时,调用此方法
 73     func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
 74         //获得当前标签的名称
 75         currentTag = elementName
 76         //判断当前的标签,是否对应于指定的实体类。
 77         if currentTag == "worker"
 78         {
 79             //如果当前标签对应于实体类,
 80             //则初始化一个实体类对象。
 81             currentWork = Worker()
 82             //并设置实体类对象唯一标识符的值,为当前标签的属性值。
 83             currentWork.id = attributeDict["id"]!
 84         }
 85     }
 86
 87     //添加一个代理方法,当解析到一个标签的全部或部分时,调用此方法
 88     func parser(_ parser: XMLParser, foundCharacters string: String) {
 89         //获得检索到的字符串,并去除字符串中的空格和换行符
 90         let str:String! = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
 91         //根据当前标签的名称,设置实体类名称属性的值
 92         if currentTag == "name" && str != ""
 93         {
 94             currentWork.name = string
 95         }
 96         //设置实体类年龄属性的值
 97         else if currentTag == "age" && str != ""
 98         {
 99             currentWork.age = string
100         }
101         //设置实体类薪水属性的值
102         else if currentTag == "salary" && str != ""
103         {
104             currentWork.salary = string
105         }
106     }
107
108     //添加一个代理方法,当解析到一个结束标签时,调用此方法
109     func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
110         //根据XML文档的结构,如果结束标签的名称时Salary,
111         //表示对一个实体类的标签检索即将结束,
112         //则将实体对象添加到数组中
113         if elementName == "salary"
114         {
115             workers.add(currentWork)
116         }
117     }
118
119     override func didReceiveMemoryWarning() {
120         super.didReceiveMemoryWarning()
121         // Dispose of any resources that can be recreated.
122     }
123 }

原文地址:https://www.cnblogs.com/strengthen/p/10050044.html

时间: 2024-10-01 18:48:41

[Xcode10 实际操作]七、文件与数据-(16)解析XML文档的相关文章

XML编程总结(七)——使用XPath对象查询xml文档

(七)使用XPath对象查询xml文档 XPath,一种为查询 XML 文档而设计的查询语言.XPath 并不是 Java 语言,事实上 XPath 不是一种完整的编程语言.有很多东西用 XPath 表达不出来,甚至有些查询也无法表达.幸运的是,可以把 XPath 结合到 Java 程序中,这样就能发挥两者的优势了:Java 做 Java 所擅长的,XPath 做 XPath 所擅长的.Java 程序执行 XPath 查询所需要的应用程序编程接口(API)还因形形色色的 XPath 引擎而各不相

pyquery——以jQuery的语法来操作解析xml文档

pyquery允许对xml文档进行jquery查询.该API尽可能类似于jquery.pyquery使用lxml进行快速的xml和html操作,能够以jQuery的语法来操作解析 HTML 文档. 实例:爬取疫情报告https://voice.baidu.com/act/newpneumonia/newpneumonia (今天报错还未调试成功,明天继续) import requests from pyquery import PyQuery as pq def get_page(url): "

ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml

前言 xsl是一门标签解析语言,很适合做动态网页的前台标签 www.bamn.cn 1 首先是aspx页面 添加一个输入框 按钮 还有一个用来显示解析后的xhtml代码的控件 <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"

详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxen 官网下载页面: http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/ 也可以在网盘上面下载:http://yunpan.cn/cwaNde7UYN83d  提取码 e247 1 完成多条Emp信息的XML描述 1.1 问

java操作xml文档

目前最常用的XML解析技术是DOM和SAX. DOM是基于XML的树结构来完成解析的,适用于多次访问的XML文档,但是DOM解析比较消耗资源:而SAX是基于事件解析,适用于大数据量的XML文档,占用资源少,内存消耗小. DOM是文档对象模型(Document Object Model) 首先DOM会将XML文档映射成一颗倒挂的树,在这棵树中,每个节点都是以节点对象的形式存在的. 我们通过操作这些对象就可以完成XML文件的读写任务了. 我们可以直接根据节点的名称或属性查找该节点对象,也可以根据一个

【Win 10应用开发】把文件嵌入到XML文档

把文件内容嵌入(或存入)到XML文档中,相信很多朋友会想到把字节数组转化为Base64字符串,再作为XML文档的节点.不过,有人会说了,转化后的base64字符串中含有像“+”这样的符号,写入到XML文档中会发生解析错误. 不知你是否想起XML文档有一种CData内容节点,它可以忽略对字符的解析处理,使用CData节点,可以存放base64字符串. 要在Win App中实现这种处理也不难. 读写XML文档有多种方法,既可以使用.net core中的类,也可以用Linq to XML,还可以用运行

python操作txt文件中数据教程[1]-使用python读写txt文件

python操作txt文件中数据教程[1]-使用python读写txt文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果 程序实现 filename = './test/test.txt' contents = [] DNA_sequence = [] # 打开文本并将所有内容存入contents中 with open(filename, 'r') as f: for line in f.readlines(): contents.append(line

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x

c# xml文档操作

原文链接 xml 文档 操作实例 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControl