Java解析XML
来源:互联网 发布:phpstudy mac 编辑:程序博客网 时间:2024/06/08 15:35
今天学习了java解析XML数据,虽然老师说很简单,不过就步骤来讲,还是比json复杂很多的。
首先了解一下XML,XML是可扩展标记语言,看起来像下面这个样子
<?xml version="1.0"?>2 <小纸条>3 <收件人>大元</收件人>4 <發件人>小張</發件人>5 <主題>問候</主題>6 <具體內容>早啊,飯吃了沒? </具體內容>7 </小纸条>```第一行为头部,展示了版本号和编码,为utf-8.xml中标签是自己定义的,两个标签中的数据为数值。在java中解析xml学习的是使用sax使用sax解析可以分为5种事件,如下 i) 开始文档事件 startDocument() ii) 开始标签事件 start Element() iii) 文本事件 charachaers() iv) 结束标签事件 endElement() v) 结束文档事件endDocument()大概流程就是在对应的解析函数中,自己操作数据,将数据取得,然后赋给实体类。下面一步一步的来完成这个过程。首先第一步创建一个sax解析工厂,这个工厂使用newInstance方法来得到,而不是创建出来的。```javaSAXParserFactory factory = SAXParserFactory.newInstance();<div class="se-preview-section-delimiter"></div>
第二步通过解析器的工厂来创建一个解析器
“`
第二步通过解析器的工厂来创建一个解析器```javaSAXParser parser = factory.newSAXParser();<div class="se-preview-section-delimiter"></div>
然后我们可以通过解析器来解析xml文档,通过parser(String,handler)其中的String就是文件路径,不过也可以通过其他的方式,比如流等,文件都可以传入,问题在于后面的handler,这里我们需要自己写一个handler针对不同的需求,所以我们下一步来自定义一个Handler,我们继承DefaultHandler类,然后重写这里面,我们上面提到的5个方法:
整个代码如下:
“`
然后我们可以通过解析器来解析xml文档,通过parser(String,handler)其中的String就是文件路径,不过也可以通过其他的方式,比如流等,文件都可以传入,问题在于后面的handler,这里我们需要自己写一个handler针对不同的需求,所以我们下一步来自定义一个Handler,我们继承DefaultHandler类,然后重写这里面,我们上面提到的5个方法:整个代码如下:```javapublic class MyHandler extends DefaultHandler{ //结果的集合 private List<Student> data = null; //当前“组装” 的对象 private Student student; private String tag;//记录当前解析的标签 @Override public void startDocument() throws SAXException { //文档的开始 //任务: 初始化集合 data = new ArrayList<>(); // 该方法只会执行一次 } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //解析到“元素的开始” , 系统自动调用 //String qName : 标签的名字 //Attributes attributes :标签中的属性(属性名称 + 属性值) //任务1: 记录当前解析的标签是什么, 方便以后的方法使用:characters() tag = qName; //任务2: 如果是对象的根元素, 那么创建对象 if("student".equals(qName)) { student = new Student(); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { String str = new String(ch, start, length).trim(); if ("id".equals(tag)) { student.setId(Integer.parseInt(str)); } else if("name".equals(tag)) { student.setName(str); } else if("age".equals(tag)) { student.setAge(Integer.parseInt(str)); } else if("sex".equals(tag)) { student.setSex(str); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { //解析的元素的结束 qName,正在解析的标签名 //任务1, 正在解析的标签如果是student 说明当前解析的对象已经组装完成了, 可以放入到集合中 if("student".equals(qName)) { data.add(student); } tag = ""; } @Override public void endDocument() throws SAXException { //文档结束 } public List<Student> getList() { return data; }}<div class="se-preview-section-delimiter"></div>
这里解析的是一个student对象,之后在
“`
这里解析的是一个student对象,之后在```javaparser.parse("student.xml", handler);List<Student> data = handler.getList(); for(Student student:data) { System.out.println(student); }<div class="se-preview-section-delimiter"></div>
就能输出结果
另外,xml文件如下
这里写代码片
就能输出结果另外,xml文件如下```html<?xml version="1.0" encoding="UTF-8"?><students><student><id>1</id><name>zhangsan</name><age>20</age><sex>male</sex></student><student><id>2</id><name>lisi</name><age>21</age><sex>female</sex></student></students>
student类根据上面的属性写出,然后添加getset方法和toString方法即可
阅读全文
0 0
- [xml]java解析xml ,怀旧
- java解析xml 克隆xml
- Java解析XML (DOM解析XML)
- xml解析---Java解析xml文件
- java 解析 xml文件
- java 解析xml
- JAVA解析XML DOM
- java如何解析xml
- JAVA解析XML DOM
- java 解析XML
- JAVA解析xml
- java解析xml字符串
- Java解析XML文档
- JAVA 解析XML文档
- JAVA解析XML DOM
- java解析Xml
- java jdom 解析xml
- java解析XML
- [LintCode]211.字符串置换(词语变形 互为变形词)
- 依赖注入和控制反转的理解
- javaBST
- 安装pip
- EXTJS与java后台交互(一)DWR使用
- Java解析XML
- 从输入网址到显示网页-1-简介
- PCL:将点云写入PCD文件中
- single-number-ii
- Building Roads(Prim+Kruskal)
- mkdir命令
- Java多线程-实例解析
- PostgreSQL之Json类型使用总结
- NMF 非负矩阵分解(Non-negative Matrix Factorization)实践