版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37527943/article/details/84850447
导读
1.xml简介
2.xml解析
xml简介
在ecplise中使用xml
也可以在other->搜索xml,选择xml file
要将后缀定义为.xml
在open with中选择xml Editor,如果没有,在other中查看,如果还没有,那就是没有配置
xml解析
SAX解析XML
实例
stus_info.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<id>1</id>
<name>小明</name>
<sex>男</sex>
<age>18</age>
</student>
<student id="2">
<name>小红</name>
<sex>女</sex>
<age>19</age>
</student>
</students>
Student.java
package com.hala.xml;
public class Student {
private int id;
private String name;
private int age;
private String sex;
public Student() {
super();
}
public Student(int id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
MyHandler.java
package com.hala.xml;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyHandler extends DefaultHandler {
//用来装处理好的学生类对象
private List<Student> list;
//保存刚创建的学生对象
private Student stu;
//记录标签名
private String tagName;
public List<Student> getList() {
return list;
}
@Override
public void startDocument() throws SAXException {
System.out.println("开始文档");
list=new ArrayList<>();
}
@Override
public void endDocument() throws SAXException {
System.out.println("结束文档");
}
/**
* qName:标签名
* attributes:属性
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("开始元素");
if(qName.equals("student")){
stu=new Student();
}
//记录这个开始标签
tagName=qName;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("结束元素");
if(qName.equals("student")){
list.add(stu);
stu=null;
}
tagName=null;
}
/**
* ch:用数组表示的内容
* start:内容开始位置
* length:内容的长度
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println("处理内容");
//去掉空格后转化为字符串
String content=new String(ch,start,length).trim();
if(!content.equals("")){
if(tagName.equals("id")){
stu.setId(Integer.valueOf(content));
}else if(tagName.equals("name")){
stu.setName(content);
}else if(tagName.equals("age")){
stu.setAge(Integer.parseInt(content));
}else if(tagName.equals("sex")){
stu.setSex(content);
}
}
}
}
SAXParserDemo.java
package com.hala.xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class SAXParserDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Student> list=parse("stus_info.xml");
for(Student stu:list){
System.out.println(stu);
}
}
/**
* 利用sax解析器解析文件
* @param path 文件路径
*/
public static List<Student> parse(String path){
//1.获取SAX解析器工厂对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.利用解析器工厂对象获取解析器对象
try {
SAXParser parser=factory.newSAXParser();
//3.解析
MyHandler handler=new MyHandler();
parser.parse(new FileInputStream(path),handler);
//获取集合
return handler.getList();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}