xml中的Document和Attribute

1.Document

導入dom4j的步驟

  1. 去官網下載 zip 包。http://www.dom4j.org/
    在這裏插入圖片描述
  2. 在項目中創建一個文件夾:lib
  3. 將dom4j-2.1.1.jar文件複製到 lib 文件夾
  4. 在jar文件上點右鍵,選擇 Add as Library -> 點擊OK
  5. 在類中導包使用

得到Document對象

步驟:

文件Contact.xml放在src目錄下

  1. 創建一個SAXReader對象,用於讀取 xml 文件
  2. 從類路徑下加載xml文件,得到輸入流對象
  3. 通過 SAXReader對象的read(InputStream in )方法,從輸入流中讀取,生成文檔對象

代碼

/**
 1. 得到文檔對象
 2. 得到根元素
 */
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        //1. 創建類: 讀取XML文件
        SAXReader reader = new SAXReader();
        //不建議這麼寫
        //FileInputStream in = new FileInputStream("D:\\IdeaWork\\JavaEE105\\day23-xml\\src\\Contacts.xml");
        //src目錄就是編譯以後的類路徑,從類路徑下得到輸入。
        InputStream in = Demo3Document.class.getResourceAsStream("/Contacts.xml");
        //2.通過reader來讀取xml, 生成了一個document對象
        Document document = reader.read(in);
        //3. 輸出文檔
        System.out.println(document);
        //4. 得到文檔以後,通過文檔得到根元素
        Element rootElement = document.getRootElement();
        System.out.println(rootElement);
    }

Document常用方法

方法名 功能說明
Element getRootElement() 通過文檔對象得到根元素
String getName() 獲取元素名
List<Element> elements() 獲取所有子元素
List<Element> elements(String name) 獲取知名名字的多個子元素

2.Attribute

Attribute常用方法:

方法名 功能說明
String getName() 得到屬性的名字
String getValue() 得到屬性的值

得到屬性值的兩種方式

  1. 先得到Attribute對象,再通過Attribute對象得到屬性的值
  2. 通過方法attributeValue()直接得到屬性值

案例:

  1. 使用2種方式,得到contact上id屬性值
  2. 在contact元素上添加一個vip的屬性值爲true/false,得到contact上所有的屬性名和屬性值

效果
在這裏插入圖片描述

代碼:

 public static void main(String[] args) throws DocumentException {
        //1. 創建SAXReader
        SAXReader reader = new SAXReader();
        //2. 調用read 方法,讀取 xml 文件
        Document document = reader.read(Demo4Attribute.class.getResourceAsStream("/Contacts.xml"));
        //3. 得到根元素
        Element rootElement = document.getRootElement();
        //4. 獲得第1個contact元素對象
        Element contact = rootElement.element("contact");
        //5. 通過方式1:得到contact上id屬性值
        Attribute idAttr = contact.attribute("id");
        String idValue = idAttr.getValue();
        System.out.println(idValue);
        //6. 通過方式2:得到contact上id屬性值
        String id = contact.attributeValue("id");
        System.out.println(id);
        //7. 得到contact上所有的屬性名和屬性值
        List<Attribute> attributes = contact.attributes();
        for (Attribute attribute : attributes) {
            System.out.println("屬性名:" + attribute.getName());
            System.out.println("屬性值:" + attribute.getValue());
        }
    }

獲取文本內容
通過元素對象得到文本字符串得到文本元素的前提:先得到元素對象

  • 注意:

空格、換行、製表符:也是屬於文本的一部分,所以在解析xml文件的時候,格式化XML文件要注意。

元素中得到文本有關的方法

Element**元素中的方法 說明
String getText() 得到元素中文本
String elementTextTrim(元素名) 得到子元素中文本,去掉先後空格
String elementText(元素名) 得到子元素中文本

需求
得到第1個contact中的name元素,輸出name元素的文本。分別通過下面三個方法得到:

  1. 通過getText()方法得到
  2. 直接得到元素的內容
  3. 得到去掉空格的文本

代碼;

public static void main(String[] args) throws DocumentException {
        // 1.創建SAXReader
        SAXReader reader = new SAXReader();
        // 2.調用read 方法,讀取 xml 文件
        Document document = reader.read(Demo5Text.class.getResourceAsStream("/Contacts.xml"));
        // 3.得到根元素
        Element rootElement = document.getRootElement();
        // 得到contact標籤
        Element contact = rootElement.element("contact");
        // 得到name標籤中的文本
        Element name = contact.element("name");
        System.out.println(name.getText());
        // 得到子元素的文本
        System.out.println(contact.elementText("name"));
        // 得到子元素的文本並且去掉前後空格
        System.out.println(contact.elementTextTrim("name"));
    }

XML解析案例

目標

利用 Dom4j 的知識,將Contact.xml 文件中的聯繫人數據封裝成List集合,其中每個元素是實體類Contact。打印輸出 List 中的每個元素。

運行效果

在這裏插入圖片描述

數據準備

Contact.xml

<?xml version="1.0" encoding="UTF-8"?>
<contactList>
    <contact id="1">
        <name>潘金蓮</name>
        <gender></gender>
        <email>panpan@itcast.cn</email>
    </contact>
    <contact id="2">
        <name>武松</name>
        <gender></gender>
        <email>wusong@itcast.cn</email>
    </contact>
    <contact id="3">
        <name>武大狼</name>
        <gender></gender>
        <email>wuda@itcast.cn</email>
    </contact>
</contactList>
Contact.java實體類
 //  聯繫人實體類
public class Contact {
    private int id;
    private String name;
    private String gender;
    private String email;
    //  省略構造方法get、set、tostring
    }

代碼:

public static void main(String[] args) throws DocumentException {
        //1. 得到SaxReader
        SAXReader reader = new SAXReader();
        //2. 得到文檔對象
        Document document = reader.read(Demo6Contact.class.getResourceAsStream("/Contact.xml"));
        //3. 得到根元素
        Element rootElement = document.getRootElement();
        //4. 創建集合
        List<Contact> list = new ArrayList<>();
        //5. 得到所有聯繫人
        List<Element> contactElements = rootElement.elements();
        //每個就是一個聯繫人
        for (Element contactElement : contactElements) {
            //創建一個聯繫人
            Contact contact = new Contact();
            //System.out.println(contactElement.getName());  //打印標籤名
            //得到id屬性值,將字符串轉成int類型
            int id = Integer.parseInt(contactElement.attributeValue("id"));
            contact.setId(id);
            //得到子元素中文本
            contact.setName(contactElement.elementText("name"));
            contact.setGender(contactElement.elementText("gender"));
            contact.setEmail(contactElement.elementText("email"));
            //將當前對象添加到集合中
            list.add(contact);
        }
        //打印集合中所有的聯繫人
        for (Contact contact : list) {
            System.out.println(contact);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章