目录
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...