XML(Java SE第三阶段11)

目录

XML

XML处理指令

XML特点

实体引用

CDATA段 

XML解析

SAX解析

DOM解析

使用DOM4J解析XML文档

XML


XML指可扩展标记性语言(Extensible Markup Language),是独立于软件与硬件的信息传输工具。

  • XML应用于web开发的许多方面,常用于简化数据的存储和共享。

XML处理指令

XML处理指令,简称PI(Processing Instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。

<?xml version="1.0" encoding="UTF-8"?>
  •  在XML中,所有的处理指令都以"<?"开始,以"?>"结束。
  • XML处理指令要求指定一个version属性。并允许指定可选的standalone(是否允许使用外部声明)和encoding(字符编码格式)。

XML特点

  • XML元素指的是从开始标签直到结束标签的部分。元素可包含其他元素、文本或两者混合物。
  • XML属性必须加引号,单引号和双引号都可以。如果是双重引号,用双引号套一个单引号。
  • XML对大小写敏感。
  • 元素必须有关闭标签。
  • XML要求必须有根元素,并且只能有一个。
  • XML要求所有元素必须正确的嵌套。

实体引用

CDATA段 

格式:<![CDTA[文本内容]]>

  • 特点:所有内容被当成一整块文本数据对待。 

XML解析


SAX解析

  • SAX(Simple API for XML)是一种XML解析的替代方法。

DOM解析

  • DOM(Document Object Model),即文档对象模型,是W3C组织推荐的处理XML的一种方式。
  • SAX与DOM的对比:

使用DOM4J解析XML文档

使用dom4j解析xml文档的大致步骤:
            1.创建SAXReader。
            2.使用SAXReader读取要解析的XML文档。
            这一步就是DOM解析耗时耗资源的体现了,该方法会将XML文档整体读取完毕,并生成对应的树结构存入Document对象中,并将其返回。
            3.通过Document对象获取根元素。
            4.按照XML文档结构从根元素开始逐级遍历子元素以达到遍历XML文档数据的目的。

Element的每一个实例用于表示XML文档中的一个元素(一个标签), 它提供了一组获取该标签相关信息的方法:

package xml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

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


 */
public class ParseXMLDemo {

	public static void main(String[] args) {
		try {
			//1
			SAXReader reader = new SAXReader();
			//2
			File file = new File("./emplist.xml");
			Document doc = reader.read(file);

			Element root =doc.getRootElement();
			
			List<Emp> list = new ArrayList<>();
			
			// 从根标签中获取所有<emp>标签
			List<Element> emps = root.elements("emp");// 参数不写获取所有标签
			System.out.println(emps.size());// 5
			//遍历每一个<emp>标签获取员工信息
			for (Element empEle : emps) {
				// 获取员工的名字
				// 1获取<emp>标签下的<name>子标签
				Element nameEle = empEle.element("name");
				// 2获取<name>标签中间的文本
				String name = nameEle.getText();// getTextTrim()方法可以将前后空格去掉

				// 获取员工的年龄
				Element ageEle = empEle.element("age");
				int age = Integer.parseInt(ageEle.getText());

				/**
				 * String elementText(String name)
				 * 获取当前子标签下指定名字的子标签中间的文本
				 * 例如下面的代码,等同于:
				 * String gender = empEle.element("gender").getText();
				 */
				// 获取员工的性别
				String gender = empEle.elementText("gender");

				// 获取员工的薪资
				int salary = Integer.parseInt(empEle.elementText("salary"));
				
				System.out.println(name + "\n" + age + "\n" + gender + "\n" + salary);
				
				//获取<emp>标签的属性id
//				Attribute attr = empEle.attribute("id");
//				int id = Integer.parseInt(attr.getValue());//getName()获取属性名字
				
//				int id = Integer.parseInt(empEle.attribute("id").getValue());
				
				int id = Integer.parseInt(empEle.attributeValue("id"));
				
				System.out.println(id);
				
				Emp emp = new Emp(id, name, age, gender, salary);// new一个emp实例存入其中
				list.add(emp);
			}
			System.out.println("解析完毕!");
			for (Emp emp: list) {
				System.out.println(emp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 员工类 每个实例用于表示XML文档中的一个员工信息

package xml;

public class Emp {
	private int id;
	private String name;
	private int age;
	private String gender;
	private int salary;
	public Emp(int id, String name, int age, String gender, int salary) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.salary = salary;
	}
	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 getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}
	
	@Override
		public String toString() {
			return id+","+name+","+age+","+gender+","+salary;
		}
	
	
}

Fighting...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值