XML 指可扩展标记语言(EXtensible Markup Language)。
XML 是一种很像HTML的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准。
1.准备xml文件
<?xml version="1.0" encoding="UTF-8"?>
<student>
<username>张三</username>
<age>19</age>
<addr>四川成都</addr>
<phone>11000012120</phone>
<!-- <a><b>我是在a节点里面的节点</b></a>-->
</student>
名称可以包含字母、数字以及其他的字符,名称不能以数字或者标点符号开始
名称不能以字母 xml(或者XML、Xml等等)开始,名称不能包含空格
2.解析xml
DOM解析原理:
1)JAXB (oracle-Sun公司官方)
2)JDOM工具(非官方)
3)Dom4J工具(非官方)
三大框架(默认读取xml的工具就是Dom4j)
.......
SAX解析原理:
1)Sax解析工具(oracle-sun公司官方)
2.1DoM4j
package com.keduo.shangke.xml;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.File;
public class Dom4jDemo {
/**
* 获取document对象 三种方式
*/
@Test
public void getDom() throws Exception {
//方式一:不推荐
Document document1 = DocumentHelper.createDocument();
Element root1 = document1.addElement("student");
System.out.println("方式1" + root1.getName());
//方式二: 经常使用
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读取文件 转换成Document
Document document2 = reader.read(new File("students.xml"));
Element root2 = document2.getRootElement();
System.out.println("方式2" + root2.getName());
//方式三: 强烈不推荐
String xmlStr = "<student>\n" +
"<username>张三</username>\n" +
"<age>19</age>\n" +
"<addr>四川成都</addr>\n" +
"<phone>11000012120</phone>\n" +
"</student>";
Document document3 = DocumentHelper.parseText(xmlStr);
Element root3 = document3.getRootElement();
System.out.println("方式3" + root3.getName());
}
/**
* 获取xml节点内容
*/
@Test
public void getElement() throws Exception{
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读取文件 转换成Document
Document document = reader.read(new File("students.xml"));
Element root = document.getRootElement();
System.out.println("根节点-->"+root.getName());
//获取子节点
Element node=root.element("username");//在root节点下面找username节点
System.out.println("节点名称------>"+node.getName()+",节点值------->"+node.getStringValue());
//获取子节点中嵌套的子节点
Element a=root.element("a");//在root节点下面找username节点
Element b=a.element("b");
System.out.println("子节点里面嵌套的子节点是------->>>>"+b.getName()+"....."+b.getStringValue());
}
}
2.2JAXB通过注解解析
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。
JAXB(Java Architecture for XML Binding)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
package com.keduo.shangke.xml;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
//类名要与属性对应的节点父节点绑定
@XmlRootElement(name = "student")
public class Student {
private String username;
private String age;
private String addr;
private String phone;
//@XmlElemen:将xml中的对应属性绑定起来 写在get和set方法上,不能写在属性上
@XmlElement(name = "username")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@XmlElement(name = "age")
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@XmlElement(name = "addr")
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@XmlElement(name = "phone")
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", age='" + age + '\'' +
", addr='" + addr + '\'' +
", phone='" + phone + '\'' +
'}';
}
}package com.keduo.shangke.xml;
import org.junit.Test;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class JaxbTest {
@Test
public void test() throws JAXBException {
//第一步准备xml文件
//第二步准备xml文件对应的实体类
//第三步在对应的实体类中添加注解
//第四步使用jaxb技术,实现
JAXBContext js=JAXBContext.newInstance(Student.class);
//创建Unmarshaller对象
Unmarshaller u=js.createUnmarshaller();
Student student= (Student) u.unmarshal(new File("students.xml"));
System.out.println(student);
}
}
3.sax解析xml