亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

詳解xml文件描述,讀取方法以及將對象存放到xml文檔中,并按照指定的特征尋找的方案

2019-11-15 00:34:31
字體:
來源:轉載
供稿:網友
詳解xml文件描述,讀取方法以及將對象存放到xml文檔中,并按照指定的特征尋找的方案

主要的幾個功能:

1.完成多條Emp信息的XML描述2.讀取XML文檔解析Emp信息3.將Emp(存放在List中)對象轉換為XML文檔4.在XML文檔中查找指定特征的Emp信息

dom4j,jaxen 官網下載頁面: http://sourceforge.net/PRojects/dom4j/files/dom4j-2.0.0-ALPHA-2/

也可以在網盤上面下載:http://yunpan.cn/cwaNde7UYN83d 提取碼 e247

1 完成多條Emp信息的XML描述

1.1 問題

現有多條Emp信息數據,如表-1所示:

表- 1 Emp信息數據

表-1中,每一行數據表示一條Emp信息。要求完成表-1中Emp信息數據的XML描述。

1.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:創建XML文件

首先,創建名為EmpList.xml的XML文件;然后,在該文件中使用處理指令設置屬性version以及屬性encoding的值,代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?>

步驟二:確定根元素

XML要求必須有根元素,所謂根元素就是不被其它元素包圍,并且根元素只能有一個。本案例使用<list>作為根元素,表示該元素內可以包含多條子元素作為Emp信息數據,代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?><list></list>

注意,在該文檔中,不能再定義與list平級的XML元素。

步驟三:定義表示Emp信息數據的元素

首先,在根元素 <list> 下,定義一個子元素 <emp></emp>,用于表示一條Emp信息,代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?><list>    <emp>    </emp></list>

步驟四:為 <emp> 元素定義 id 屬性

為元素 <emp> 定義屬性id,用于表示Emp信息數據中的id,代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?><list>    <emp id="1">    </emp></list>

步驟五:為 <emp> 元素定義子元素

為元素 <emp> 定義子元素 <name>、<age>、<gender> 和 <salary>,分別表示Emp信息數據中的name、age、gender以及salary。并為這四個子元素添加文本信息,以記載 Emp 的相關信息數據,代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?><list>   <emp id="1">        <name>張三</name>        <age>34</age>        <gender>男</gender>        <salary>3000</salary>    </emp></list>

步驟六:實現多條Emp信息數據的XML描述

一個 <emp> 元素表示一條 Emp 數據,因此,可以用多個 <emp> 元素來描述剩余的多條Emp信息數據。代碼如下所示:

<?xml version="1.0" encoding="UTF-8"?><list>    <emp id="1">        <name>張三</name>        <age>34</age>        <gender>男</gender>        <salary>3000</salary>    </emp>    <emp id="2">        <name>李四</name>        <age>21</age>        <gender>女</gender>        <salary>4000</salary>    </emp>    <emp id="3">        <name>王五</name>        <age>46</age>        <gender>女</gender>        <salary>6500</salary>    </emp>    <emp id="4">        <name>趙六</name>        <age>28</age>        <gender>男</gender>        <salary>4400</salary>    </emp>    <emp id="5">        <name>錢七</name>        <age>53</age>        <gender>男</gender>        <salary>12000</salary>    </emp></list>

1.3 完整代碼

本案例中,EmpList.xml文件的完整內容如下所示:

<?xml version="1.0" encoding="UTF-8"?><list>    <emp id="1">        <name>張三</name>        <age>34</age>        <gender>男</gender>        <salary>3000</salary>    </emp>    <emp id="2">        <name>李四</name>        <age>21</age>        <gender>女</gender>        <salary>4000</salary>    </emp>    <emp id="3">        <name>王五</name>        <age>46</age>        <gender>女</gender>        <salary>6500</salary>    </emp>    <emp id="4">        <name>趙六</name>        <age>28</age>        <gender>男</gender>        <salary>4400</salary>    </emp>    <emp id="5">        <name>錢七</name>        <age>53</age>        <gender>男</gender>        <salary>12000</salary>    </emp></list>

2 讀取XML文檔解析Emp信息

2.1 問題

解析上一案例中創建的XML文檔EmpList.xml。首先,將每一個<emp>節點中的屬性和子元素封裝為一個Emp對象;然后,將Emp對象存儲到List集合中并輸出到控制臺。

封裝emp對象的代碼:

package com.souvc.xml;public class Emp {    private int id;    private String name;    private int age;    private String gender;    // private String element;    private double salary;    public Emp() {    }    public Emp(int id, String name, int age, String gender, double 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 double getSalary() {        return salary;    }    public void setSalary(double salary) {        this.salary = salary;    }    public String toString() {        return "id=" + id + ",name=" + name + ",age=" + age + ",gender=" + gender                + ",salary=" + salary;    }}

2.2 方案

dom4j是一個java的XML API,用來讀寫XML文件。dom4j是一個非常優秀的Java XML API,具有性能優異、功能強大和極端易用的特點,同時它也是一個開放源代碼的軟件。使用dom4j來實現對XML文檔的解析,詳細過程如下:

1)使用dom4j需要導入dom4j對應的jar包。

dom4j,jaxen 官網下載頁面: http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/

也可以在網盤上面下載:http://yunpan.cn/cwaNde7UYN83d 提取碼 e247

2)創建SAXReader類的對象來實現讀取XML文檔,代碼如下:

SAXReader reader = new SAXReader();

3)使用SAXReader類的read方法獲取Document對象,Document 對象是一棵文檔樹的根,可為我們提供對文檔數據的最初(或最頂層)的訪問入口,代碼如下:

Document doc = reader.read(new File("EmpList.xml"));

4)使用Document對象的getRootElement方法獲取要解析的XML文檔的根元素,該方法返回值類型為Element。 Element 對象表示 XML文檔中的元素。元素可包含屬性、其它元素或文本。如果元素含有文本,則在文本節點中表示該文本,代碼如下:

Element root = doc.getRootElement();

5)接下來,可以使用Element對象提供的方法繼續解析XML文檔,例如:其elements方法用來獲取當前元素下的所有子元素,代碼如下:

List<Element> elements = root.elements();

2.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:導入dom4j對應的jar包

在當前工程下導入dom4j對應的jar包。

dom4j,jaxen 官網下載頁面: http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/

也可以在網盤上面下載:http://yunpan.cn/cwaNde7UYN83d 提取碼 e247

并且把EmpList.xml 文件放到工程目錄下面,方便讀取。

步驟二:新建類及測試方法

首先,新建類TestDom;然后在該類中新建測試方法testReadXml,代碼如下所示:

    import org.junit.Test;    public class TestDom {        /**         * 使用DOM解析XML文件         */    @Test        public void testReadXml() {    }

步驟三:創建SAXReader類的對象,獲取Document對象

創建SAXReader類的對象來實現讀取XML文檔;然后,使用SAXReader類的read方法獲取Document對象,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 使用DOM解析XML文件     */@Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟四:獲取根元素

使用Document對象的getRootElement方法獲取EmpList.xml文檔的根元素,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用DOM解析XML文件     */@Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟五:獲取<list>節點下的所有子元素

使用Element對象的elements方法獲取<list>節點下的所有子元素,即所有的<emp>節點,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用DOM解析XML文件     */@Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();            // 獲取list下的所有子節點emp            List<Element> elements = root.elements();        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟六:封裝Emp對象,存儲到List集合中

1)創建存儲的數據類型為Emp類型的List集合emps;

2)循環上一步中的elements集合,每循環一次獲取一個emp元素。在循環中使用Element對象的attribute方法獲取id 屬性對應的Attribute對象,再使用Attribute對象的getValue方法就可以獲取到屬性id對應的文本信息,即Emp對象的屬性id的 信息;

3)在循環中,使用Element對象的elementText方法獲取節 點<name>、<age>、<gender>以及<salary>對應的文本信息,即Emp對象的屬 性name、age、gender以及salary。

4)在循環中,將上述獲取到的信息封裝為Emp對象,存儲到集合emps中。

代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用DOM解析XML文件     */@Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();            // 獲取list下的所有子節點emp            List<Element> elements = root.elements();            // 保存所有員工對象的集合            List<Emp> emps = new ArrayList<Emp>();            for (Element element : elements) {                int id = Integer.parseInt(element.attribute("id").getValue());                String name = element.elementText("name");                int age = Integer.parseInt(element.elementText("age"));                String gender = element.elementText("gender");                double salary = Double.parseDouble(element                        .elementText("salary"));                Emp emp = new Emp(id, name, age, gender, salary);                emps.add(emp);            }        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟七:輸出集合

將emps集合的信息輸出到控制臺,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用DOM解析XML文件     */@Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();            // 獲取list下的所有子節點emp            List<Element> elements = root.elements();            // 保存所有員工對象的集合            List<Emp> emps = new ArrayList<Emp>();            for (Element element : elements) {                int id = Integer.parseInt(element.attribute("id").getValue());                String name = element.elementText("name");                int age = Integer.parseInt(element.elementText("age"));                String gender = element.elementText("gender");                double salary = Double.parseDouble(element                        .elementText("salary"));                Emp emp = new Emp(id, name, age, gender, salary);                emps.add(emp);            }            System.out.println("解析完畢");            System.out.println(emps);        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟八:運行

運行testReadXml方法,控制臺輸出結果如下所示:

解析完畢

解析完畢[id=1,name=張三,age=34,gender=男,salary=3000.0, id=2,name=李四,age=21,gender=女,salary=4000.0, id=3,name=王五,age=46,gender=女,salary=6500.0, id=4,name=趙六,age=28,gender=男,salary=4400.0, id=5,name=錢七,age=53,gender=男,salary=12000.0]

從輸出結果可以看出,已經對EmpList.xml文檔進行解析,將每一個<emp>節點中的屬性和子元素封裝為一個Emp對象并將Emp對象存儲到List集合中。

2.4 完整代碼

本案例中,類TestDom的完整代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 使用DOM解析XML文件     */    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();            // 獲取list下的所有子節點emp            List<Element> elements = root.elements();            // 保存所有員工對象的集合            List<Emp> emps = new ArrayList<Emp>();            for (Element element : elements) {                int id = Integer.parseInt(element.attribute("id").getValue());                String name = element.elementText("name");                int age = Integer.parseInt(element.elementText("age"));                String gender = element.elementText("gender");                double salary = Double.parseDouble(element                        .elementText("salary"));                Emp emp = new Emp(id, name, age, gender, salary);                emps.add(emp);            }            System.out.println("解析完畢");            System.out.println(emps);        } catch (Exception e) {            e.printStackTrace();        }    }}

3 將Emp(存放在List中)對象轉換為XML文檔

3.1 問題

在List集合中存儲了如下數據:

List<Emp> emps = new ArrayList<Emp>();    emps.add(new Emp(1, "張三", 33, "男", 9000));    emps.add(new Emp(2, "李四", 26, "男", 5000));    emps.add(new Emp(3, "王五", 48, "男", 34000));

請將集合emps中的所有Emp對象轉換為XML文件的形式。

3.2 方案

使用dom4j建立XML文檔的過程如下:

1)創建文檔對象,代碼如下:

Document doc = DocumentHelper.createDocument();

2)創建根節點,代碼如下:

Element root = doc.addElement("list");

3)在節點下添加注釋、屬性、子節點,Element提供如下方法:

addComment:方法添加注釋addAttribute:添加屬性addElement:添加子元素

4)通過XMLWriter 生成物理文件。

3.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:添加測試方法testWriteXml

首先在TestDom類中新建測試方法testWriteXml;然后在該測試方法中,添加List集合存儲Emp對象的代碼,代碼如下所示:

import java.util.ArrayList;import java.util.List; import org.junit.Test; public class TestDom {    /**     * 測試寫xml     */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));    }}

步驟二:創建文檔對象

使用DocumentHelper類的靜態方法createDocument創建文檔對象Document,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 測試寫xml     */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));         try {            Document doc = DocumentHelper.createDocument();        } catch (Exception e) {            e.printStackTrace();        }    }

步驟三:創建根節點

使用Document類的addElement方法,創建根節點<list>,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 測試寫xml     */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));         try {            Document doc = DocumentHelper.createDocument();            // 添加根標記            Element root = doc.addElement("list");        } catch (Exception e) {            e.printStackTrace();        }    }

步驟四:添加子元素

首先,循環集合emps,在循環中獲取Emp對象的信息;然后,在循環中使用Element類的addAttribute方法在該元素下添加 屬性,屬性的值為對應Emp對象中的成員變量的值;使用addElement方法在該元素下添加子元素;使用addText方法為該子元素添加文本,該文 本也為對應Emp對象中成員變量的值,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 測試寫xml     */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));         try {            Document doc = DocumentHelper.createDocument();            // 添加根標記            Element root = doc.addElement("list");            for (Emp emp : emps) {                // 向根元素中添加名為emp的子元素                Element ele = root.addElement("emp");                // 為emp元素添加屬性id,其值為cp                ele.addAttribute("id", emp.getId() + "");                ele.addElement("name").addText(emp.getName());                ele.addElement("age").addText(emp.getAge() + "");                ele.addElement("gender").addText(emp.getGender());                ele.addElement("salary").addText(emp.getSalary() + "");            }        } catch (Exception e) {            e.printStackTrace();        }    }

步驟五:生成物理文件

通過XMLWriter 生成物理文件,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 測試寫xml     */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));         try {            Document doc = DocumentHelper.createDocument();            // 添加根標記            Element root = doc.addElement("list");            for (Emp emp : emps) {                // 向根元素中添加名為emp的子元素                Element ele = root.addElement("emp");                // 為emp元素添加屬性id                ele.addAttribute("id", emp.getId() + "");                ele.addElement("name").addText(emp.getName());                ele.addElement("age").addText(emp.getAge() + "");                ele.addElement("gender").addText(emp.getGender());                ele.addElement("salary").addText(emp.getSalary() + "");            }            // 寫出            XMLWriter writer = new XMLWriter();            FileOutputStream fos = new FileOutputStream("emps.xml");            writer.setOutputStream(fos);            writer.write(doc);            writer.close();        } catch (Exception e) {            e.printStackTrace();        }    }

步驟六:運行

運行testWriteXml方法,會在當前工程目錄下生成emps.xml文件,該文件中的內容如下:

<?xml version="1.0" encoding="UTF-8"?><list>    <emp id="1">        <name>張三</name>        <age>33</age>        <gender>男</gender>        <salary>9000.0</salary>    </emp>    <emp id="2">        <name>李四</name>        <age>26</age>        <gender>男</gender>        <salary>5000.0</salary>    </emp>    <emp id="3">        <name>王五</name>        <age>48</age>        <gender>男</gender>        <salary>34000.0</salary>    </emp></list>

3.4 完整代碼

本案例的完整代碼如下所示:

package com.souvc.xml;import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用DOM解析XML文件     */    @Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();            // 獲取list下的所有子節點emp            List<Element> elements = root.elements();            // 保存所有員工對象的集合            List<Emp> emps = new ArrayList<Emp>();            for (Element element : elements) {                int id = Integer.parseInt(element.attribute("id").getValue());                String name = element.elementText("name");                int age = Integer.parseInt(element.elementText("age"));                String gender = element.elementText("gender");                double salary = Double.parseDouble(element                        .elementText("salary"));                Emp emp = new Emp(id, name, age, gender, salary);                emps.add(emp);            }            System.out.println("解析完畢");            System.out.println(emps);        } catch (Exception e) {            e.printStackTrace();        }    }        /**     *      * 測試寫xml     *      */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));        try {            Document doc = DocumentHelper.createDocument();            // 添加根標記            Element root = doc.addElement("list");            for (Emp emp : emps) {                // 向根元素中添加名為emp的子元素                Element ele = root.addElement("emp");                // 為emp元素添加屬性id,其值為cp                ele.addAttribute("id", emp.getId() + "");                ele.addElement("name").addText(emp.getName());                ele.addElement("age").addText(emp.getAge() + "");                ele.addElement("gender").addText(emp.getGender());                ele.addElement("salary").addText(emp.getSalary() + "");            }            // 寫出            XMLWriter writer = new XMLWriter();            FileOutputStream fos = new FileOutputStream("emps.xml");            writer.setOutputStream(fos);            writer.write(doc);            System.out.println("生成文檔完畢!");            writer.close();        } catch (Exception e) {            e.printStackTrace();        }    }            }

4 在XML文檔中查找指定特征的Emp信息

4.1 問題

在上一案例中,我們創建了emps.xml文件,本案例要求查找該文件中屬性id的值為2的<emp>節點,并讀取該節點下子節點<name>的文本信息。另外,要求使用XPath來實現。

4.2 方案

XPath 是一門在 XML 文檔中查找信息的語言。XPath 可用來在 XML 文檔中對元素和屬性進行遍歷。我們使用DOM定位節點時,大部分時間需要一層一層的處理,如果有了XPath,我們定位節點將變得很輕松。它可以根據路 徑,屬性,甚至是條件進行節點的檢索。例如本案例中,檢索屬性id的值為2的<emp>節點,則可以使用如下路徑表達式:

/list/emp[@id='2']

上述表達式中還使用謂語條件。所謂"謂語條件",就是對路徑表達式的附加條件。所有的條件,都寫在方括號"[]"中,表示對節點進行進一步的篩選。

4.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:新建測試方法

在TestDom類中新建測試方法findId,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 使用XPath查找指定信息     */    @Test    public void findId() {    }}

步驟二:創建SAXReader類的對象,獲取Document對象

首先,創建SAXReader類的對象來實現讀取XML文檔;然后,使用SAXReader類的read方法獲取Document對象,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 使用XPath查找指定信息     */    @Test    public void findId() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("emps.xml"));        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟三: 使用XPath和謂語條件查找節點

使用Element對象的selectNodes方法,獲取XPath和謂語條件為“/list/emp[@id='2']”的所有元素,即查找到所有id為2的emp元素,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test; public class TestDom {    /**     * 使用XPath查找指定信息     */    @Test    public void findId() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("emps.xml"));            // 查找id為2的用戶信息            List list = doc.selectNodes("/list/emp[@id='2']");            System.out.println("選取了:" + list.size() + "條數據");        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟四: 獲取<emp>節點下<name>子節點的文本信息

循環遍歷上一步得到的list集合,在循環中使用Element對象的elementText方法獲取<emp>節點下<name>子節點的文本信息,代碼如下所示:

import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用XPath查找指定信息     */    @Test    public void findId() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("emps.xml"));            // 查找id為1的用戶信息            List list = doc.selectNodes("/list/emp[@id='2']");            System.out.println("選取了:" + list.size() + "條數據");            for (Object o : list) {                Element e = (Element) o;                System.out.println("name:" + e.elementText("name"));            }        } catch (Exception e) {            e.printStackTrace();        }    }}

步驟五:運行

運行findId方法,控制臺輸出結果如下:

選取了:1條數據name:李四

從輸出結果可以看出,已經查找到了emps.xml文件中屬性id的值為2的<emp>節點,并讀取了該節點下子節點<name>的文本信息。

4.4 完整代碼

本案例的完整代碼如下所示:

package com.souvc.xml;import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;public class TestDom {    /**     * 使用DOM解析XML文件     */    @Test    public void testReadXml() {        try {            // 創建SAXReader            SAXReader reader = new SAXReader();            // 讀取指定文件            Document doc = reader.read(new File("EmpList.xml"));            // 獲取根節點list            Element root = doc.getRootElement();            // 獲取list下的所有子節點emp            List<Element> elements = root.elements();            // 保存所有員工對象的集合            List<Emp> emps = new ArrayList<Emp>();            for (Element element : elements) {                int id = Integer.parseInt(element.attribute("id").getValue());                String name = element.elementText("name");                int age = Integer.parseInt(element.elementText("age"));                String gender = element.elementText("gender");                double salary = Double.parseDouble(element                        .elementText("salary"));                Emp emp = new Emp(id, name, age, gender, salary);                emps.add(emp);            }            System.out.println("解析完畢");            System.out.println(emps);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     *      * 測試寫xml     *      */    @Test    public void testWriteXml() {        List<Emp> emps = new ArrayList<Emp>();        emps.add(new Emp(1, "張三", 33, "男", 9000));        emps.add(new Emp(2, "李四", 26, "男", 5000));        emps.add(new Emp(3, "王五", 48, "男", 34000));        try {            Document doc = DocumentHelper.createDocument();            // 添加根標記            Element root = doc.addElement("list");            for (Emp emp : emps) {                // 向根元素中添加名為emp的子元素                Element ele = root.addElement("emp");                // 為emp元素添加屬性id,其值為cp                ele.addAttribute("id", emp.getId() + "");                ele.addElement("name").addText(emp.getName());                ele.addElement("age").addText(emp.getAge() + "");                ele.addElement("gender").addText(emp.getGender());                ele.addElement("salary").addText(emp.getSalary() + "");            }            // 寫出            XMLWriter writer = new XMLWriter();            FileOutputStream fos = new FileOutputStream("emps.xml");            writer.setOutputStream(fos);            writer.write(doc);            System.out.println("生成文檔完畢!");            writer.close();        } catch (Exception e) {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91美女片黄在线观| 91精品国产自产91精品| 亚洲色图偷窥自拍| 久久久久国产精品免费| 亚洲国产欧美一区二区三区久久| 欧美贵妇videos办公室| 欧美日韩国产成人在线观看| 亚洲国产日韩精品在线| 久久手机精品视频| 午夜精品www| 亚洲电影第1页| 久久久国产精品一区| 精品福利一区二区| 日韩中文字幕精品| 日韩av免费看| 欧洲精品在线视频| 亚洲视频视频在线| 国产视频精品自拍| 久久久国产精品免费| 国产拍精品一二三| 91在线观看免费高清| 久久久久久国产三级电影| 日韩大陆欧美高清视频区| 亚洲一区久久久| 美日韩丰满少妇在线观看| 91久久精品视频| 97国产精品人人爽人人做| 国产精品免费小视频| 亚洲性猛交xxxxwww| 久久久国产一区二区| 97色在线观看免费视频| 欧美在线一区二区三区四| 日韩av在线一区二区| 91探花福利精品国产自产在线| 亚洲第一视频网站| 成人黄色片在线| 51视频国产精品一区二区| 亚洲视频国产视频| 91久久久国产精品| 国产亚洲一级高清| 91久久精品美女高潮| 国产日韩专区在线| 久久99热这里只有精品国产| 欧美高跟鞋交xxxxhd| 亚洲成人网久久久| 亚洲性生活视频| 亚洲专区在线视频| 日韩欧美在线视频观看| 色老头一区二区三区| 日韩av影视综合网| 国产精品老女人精品视频| 国产精品男人爽免费视频1| 中文字幕精品www乱入免费视频| 亚洲日本aⅴ片在线观看香蕉| 懂色av一区二区三区| 欧洲成人免费aa| 一区二区三区高清国产| 欧美亚洲国产另类| 国内自拍欧美激情| 色婷婷综合久久久久| 久久精品一本久久99精品| 精品日本美女福利在线观看| 欧美壮男野外gaytube| 亚洲国语精品自产拍在线观看| 国产经典一区二区| 欧美黄色小视频| 午夜精品一区二区三区在线播放| 亚洲毛片在线观看| 91在线观看免费高清| 欧美巨乳在线观看| 亚洲欧美日韩一区二区在线| 国内免费久久久久久久久久久| 亚洲成人亚洲激情| 国内精品久久久久久影视8| 亚洲精品之草原avav久久| 国产成人精品久久二区二区91| 爽爽爽爽爽爽爽成人免费观看| 午夜精品福利在线观看| 欧美国产精品日韩| 国产精品视频网址| 国产欧美精品xxxx另类| 亚洲美女av黄| 亚洲精品国产精品自产a区红杏吧| 精品国偷自产在线| 日韩美女视频免费看| 日韩成人av一区| 欧美高清视频在线观看| 久久韩剧网电视剧| 久久九九全国免费精品观看| 色老头一区二区三区| 高跟丝袜一区二区三区| 国模视频一区二区三区| 久久影院在线观看| 久久国产精品影片| 欧美一级黄色网| 欧美一区深夜视频| 亚洲色图综合网| 亚洲天堂成人在线视频| 精品国产成人在线| 成人午夜在线观看| 色99之美女主播在线视频| 国产成人在线一区| 国产日韩在线看| 国产丝袜精品第一页| 欧美性猛交xxxx黑人| 91久久精品国产91性色| 亚洲精品一区久久久久久| 欧美大片va欧美在线播放| 久久久免费在线观看| 久久久久久国产| 午夜精品在线观看| 中文字幕精品影院| 国产精品三级久久久久久电影| 国产成人精品电影久久久| 亚洲精品日韩丝袜精品| 成人a在线观看| 国产视频久久久| 成人精品福利视频| 日韩大胆人体377p| 久久久精品一区二区| 欧美夜福利tv在线| 国产视频福利一区| 国产日韩精品综合网站| 日韩免费观看网站| 亚洲国产日韩欧美在线图片| 国产91在线播放| 亚洲精品网址在线观看| 高清亚洲成在人网站天堂| 日韩高清不卡av| 久久久久久久久久久免费精品| 久久精品视频免费播放| 国内外成人免费激情在线视频网站| 欧美在线中文字幕| 7m第一福利500精品视频| 中文字幕日韩av电影| 久久久久中文字幕| 亚洲精品美女在线| 欧美孕妇性xx| 中文字幕久久精品| 欧美成年人视频网站| 欧美性在线视频| 亚洲free嫩bbb| 91亚洲一区精品| 日韩经典中文字幕在线观看| 欧美又大又粗又长| 中文亚洲视频在线| 国产欧美一区二区三区在线看| 国产精品www网站| 欧美自拍视频在线观看| 亚洲欧美成人在线| 欧美小视频在线| xxxx性欧美| 国产精品流白浆视频| 欧美丝袜美女中出在线| 亚洲精品影视在线观看| 欧洲成人午夜免费大片| 欧美三级欧美成人高清www| 91九色单男在线观看| 亚洲娇小xxxx欧美娇小| 欧美成人免费小视频| 最近2019年日本中文免费字幕| 久久亚洲综合国产精品99麻豆精品福利| 91视频免费网站| 黄网动漫久久久|