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
参考: http://blog.csdn.net/lp284558195/article/details/79136322