天天看點

XML以及解析XML檔案

XML:是可擴充的标記語言。

XML的作用:

  1. 儲存句,而且這些資料具有自我描述性
  2. 而且以作為項目或者子產品的配置檔案
  3. 可以作為網絡傳輸資料的格式(JSON為主)

接下來建立一個xml檔案。

點選IDEA中的FIle->New->file->“命名”.xml

第一個xml檔案的代碼

<?xml version="1.0" encoding="utf-8" ?>
<!--
以上内容就是xml檔案的聲明
version 表示xml的版本
encoding 表示xml檔案本身的編碼

-->
<books><!--books表示多個圖書資訊-->
    <book sn="SN12333"><!--book表示一個圖書資訊,SN屬性表示圖書序列号-->
        <name>時間簡史</name><!--name标簽表示書名-->
        <author>霍金</author><!--author标簽表示作者-->
        <price>169</price><!--price标簽表示圖書價格-->
    </book>

    <book sn="SN12334"><!--book表示一個圖書資訊,SN屬性表示圖書序列号-->
        <name>三國演義</name><!--name标簽表示書名-->
        <author>羅貫中</author><!--author标簽表示作者-->
        <price>200</price><!--price标簽表示圖書價格-->
    </book>
</books>
           

XML元素

從開始标簽直到結束标簽的部分。元素可包含其他元素,文本,或者兩者的混合物。元素也可以擁有屬性。

使用dom4j就行xml檔案解析

package com.xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.PrintStream;

public class Dom4jTest {
    @Test
    public void test1() throws DocumentException {
        SAXReader saxReader = new SAXReader();

        Document document = saxReader.read("./xml/books.xml");
        System.out.println(document);
    }
}

           

輸出如下:

org.dom4[email protected] [Document: name ./xml/books.xml]
           

解析books.xml的内容

package com.xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.awt.print.Book;
import java.io.PrintStream;
import java.util.List;

public class Dom4jTest {
    /**
    *讀取books.xml檔案成成book類
    */
    @Test
    public void test2() throws DocumentException {
        System.out.println(":books");
        //1.讀取books.xml檔案
        SAXReader reader = new SAXReader();

        //在Junit測試中,相對路徑是從子產品名開始算的
        Document document = reader.read("./src/books.xml");

        //2.通過Dcoument對象擷取根元素
        Element rootElement = document.getRootElement();
        //3.通過根元素擷取book标簽對象

        //element()   elements()都是通過标簽名查找子元素

        List<Element> books = rootElement.elements("books");
        for(Element book:books){
            //asXML()把标簽對象轉化為标簽字元
            Element nameElement = book.element("name");
            //getText()方法可以擷取标簽中的文本内容
            String nameText = nameElement.getText();
            //直接擷取标簽名的文本内容
            String priceText = book.elementText("price");
            String authorText = book.elementText("author");
            String snValue = book.attributeValue("sn");

            System.out.println(new book(snValue, nameText, Double.parseDouble(priceText), authorText));
        }
    }
}