XML 指可擴展標記語言(EXtensible Markup Language)。html
XML 是一種很像HTML的標記語言。java
XML 的設計宗旨是傳輸數據,而不是顯示數據。node
XML 標籤沒有被預約義。您須要自行定義標籤。oracle
XML 被設計爲具備自我描述性。框架
XML 是 W3C 的推薦標準。dom
1.準備xml文件ide
<?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.解析xmlthis
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