Java.SE02.XML读写

1.两种解析方式:SAX和DOM
①SAX(simple API forXML):解析可以立即开始,速度快,没有内存压力;但不能对节点做修改.
②DOM(Document Object Model):把XML文件在内存中构造树形结构,可以遍历和修改节点;
但如果文件比较大,内存会有压力,解析时间会比较长.
③使用SAXReader需要导入dom4j-full.jar包;
④示例代码:
SAXReader reader = new SAXReader();//创建SAXReader
Document doc=reader.read(new File("helloList.xml"));//读取指定文件

2 解析XML大致步骤:
 1.创建SAXReader;
 2.读取要解析的XML文档并生成Document对象;
   这一步就是DOM解析耗时耗资源的地方了,因为需要将XML文档都读取完毕并载入内存
 3.通过Document对象获取根元素;
 4.按照XML文档的结构从根元素开始逐级获取子元素以达到遍历XML文档数据的目的;


3. Document提供了获取根元素的方法: Element getRootElement()
   Element的每一个实例用于表示XML文档中的一个元素(一对标签)
Element提供了用于获取其表示的标签的信息的相关方法:
*      String getName() 获取当前标签的名字

* Element element(String name)   获取当前标签中指定名字的子标签
*
* List elements()  据偶去当前标签中的所有子标签
*
* List element(String name)  获取当前标签中所有同名子标签
*
* Attribute attribute(String name) 获取当前标签中指定名字的属性 
*
* String getText()  获取当前标签中间的文本数据

* Attribute的每一个实例用于表示一个属性,常用方法有:
* String getName()
* String getValue()

4.涉及到的零碎遗忘的小知识:

建表: List<Element> hellolist= new ArrayList<Element>();//泛型
for(Element em:hellolist){//遍历
}

字符型转为整型: Integer.parseInt(str);


5.写出XML文档的大致步骤:
1.创建Document队形表示一个空白文档;
2.向Document中添加根元素;
3.按照XML设计的结构向根元素中逐级添加子元素及数据;
4.创建XMLWriter
5.使用XMLWriter将Document对象写出以生成XML文档


6. Document提供方法:
ElementaddElement(String name)
向文档中添加给定名字的根元素,并将其以一个Element实例的形式返回, 以便继续对该根元素操作.
需要注意,该方法只能调用一次,因为一个文档只能有一个根元素.

* Element提供了添加信息的相关方法: 
* Element addElement(String name)
* 向当前元素中追加给定名字的子元素,并以Element实例将其返回,便于操作.

* Element addText(String text)
* 向当前元素中添加文本信息.返回的还是当前标签.

* Element addAttribute(String name, String value)
* 向当前元素中添加指定属性.

7. XPath 按路径定位节点,对获取XML中部分数据有很良好的效果(应用比较少,但很有效)

①parseXML.Java

package happy01;
/**
 * 解析XML表
 * @author 爱吃木鱼的猫
 */
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class parseXML {
	public static void main(String[] args){
	try{
		SAXReader reader=new SAXReader();//创建SAXReader
		Document document=reader.read(new FileInputStream("emplist.xml"));//读取要解析的XML文档并生成Document对象
		
		Element root=document.getRootElement();//根节点
		
		List<Emp> empList=new ArrayList<Emp>();//创建集合用于保存从XML解析出的人员信息

		List<Element> list=root.elements("emp");//获取根标签的所有子标签:这里是<list>中所有<emp>
		
		
		for(Element empEle:list){
			/**获取名字*/
			Element nameEle=empEle.element("name");//获取到emp下的name;
			String name=nameEle.getText();//获取name标签中的文本内容
			
			/**获取年龄*/
			Element ageEle=empEle.element("age");
			int age = Integer.parseInt(ageEle.getText());
			
			/**获取性别*/
			String gender=empEle.elementText("gender");
			
			/**获取身高*/
			double height=Double.valueOf(empEle.elementText("height"));
			
			/**获取 属性id*/
			Attribute attr=empEle.attribute("id");
			int id=Integer.parseInt(attr.getValue());
			
			Emp emp=new Emp(id,name,age,gender,height);
			empList.add(emp);//加到保存信息的集合 empList
		}
		
		
		for(Emp e:empList){
			System.out.println(e);
			System.out.println();//换行作用
		}
	}catch(Exception e){
		
	}
	}
}

②Emp.java

package happy01;
/**
 * @author 爱吃木鱼的猫
 */
public class Emp {
	
	private int id;
	private String name;
	private int age;
	private String gender;
	private double height;
	
	public Emp(){
		
	}

	public Emp(int id, String name, int age, String gender, double height) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.height = height;
	}

	@Override
	public String toString() {
		return id+","+name+","+age+","+gender+","+height;
	}

	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 getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
}

③XML表

<?xml version="1.0" encoding="UTF-8"?>
<list>
	<emp id="1">
		<name>司马懿</name>
		<age>500</age>
		<gender>男</gender>
		<height>170.5</height>
	</emp>

	<emp id="2">
		<name>奥黛丽赫本</name>
		<age>120</age>
		<gender>女</gender>
		<height>165.2</height>
	</emp>

	<emp id="3">
		<name>钢铁侠</name>
		<age>33</age>
		<gender>男</gender>
		<height>188.5</height>
	</emp>

	<emp id="4">
		<name>波多老师</name>
		<age>44</age>
		<gender>女</gender>
		<height>168.5</height>
	</emp>
	
		<emp id="5">
		<name>白百合</name>
		<age>35</age>
		<gender>女</gender>
		<height>170</height>
	</emp>


</list>

④运行截图:






猜你喜欢

转载自blog.csdn.net/u012761191/article/details/70148092