Java解析xml獲取根節點和子節點

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