XML学习笔记

一、XML简介

XML是可扩展(可自定义标签)的标记性语言

1、XML作用:

1、用来保存数据,而且这些数据具有自我描述性

2、还可以作为项目或者模块的配置文件

3、还可以作为网络传输数据的格式,现在以json为主

2、XML语法

1、xml声明

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

<books>  <!--books表示多个图书信息-->
    <book sn="SN123455">  <!--book表示一个图书信息 sn属性表示图书序列号-->
        <name>时间简史</name>   <!--书名-->
        <author>霍金</author>   <!--作者-->
        <price>75.00</price>    <!--价格-->
    </book>

    <book sn="SN123456">  <!--book表示一个图书信息 sn属性表示图书序列号-->
        <name>Java教程</name>   <!--书名-->
        <author>小明</author>   <!--作者-->
        <price>35.00</price>    <!--价格-->
    </book>
</books>

2、xml语法介绍

(1)标签命名可以包含字母、数字和其他字符

(2)必须有根标签,且只能有一个

(3)CDATA区 文本区域:里面的内容只是纯文本,不需要XML语法解析

   <![CDATA[这里把你输入的字符原样显示,不会解析xml]]>

3、xml解析技术

html和xml都可以用w3c组织制定的dom技术来解析

早期jdk提供了两种xml解析技术dom和sax

sax解析(simple API for XML),他跟w3c制定的解析不太一样,他是以类似事件机制通过回调告诉用户当前正在解析的内容,他是一行一行的读取xml文件进行解析,不会创建大量dom对象

因此sax在解析xml时,在内存的使用上和性能上,都优于dom解析。

jdom在dom基础上进行了封装

dom4j又对jdom进行了封装

pull主要用在Android手机开发,是和sax非常类似的事件机制解析xml文件

【dom4j是第三方解析稀释,需要使用第三方的类库才可以解析xml】

4、dom4j解析技术

module下新建目录,复制dom4j的jar包进来,加入到类路径下

 

(1)Books.java

import java.math.BigDecimal;

public class Book {
    private String sn;
    private String name;
    private String author;
    private BigDecimal price;

    public Book() {
    }

    public Book(String sn, String name, String author, BigDecimal price) {
        this.sn = sn;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

(2)Dom4jTest.java

[用Junit,Dom4j 把books.xml文档中的book标签转换为Books类对象]

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

import java.math.BigDecimal;
import java.util.List;

public class Dom4jTest {
    @Test
    public void test1() {
        //创建一个SaxReader输入流,去读取xml配置文件,生成document对象
        SAXReader saxReader = new SAXReader();
        Document document = null;
        try {
            document = saxReader.read("src/books.xml");
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        System.out.println(document);
    }

    /*
    * 读取books.xml文件生成Book类*/
    @Test
    public void Test2() throws DocumentException {
        //1 读取book.xml文件
        SAXReader reader = new SAXReader();

        //2 通过document对象获取根元素
        //在junit测试中相对路径是从模块名开始算,即xml1
        Document document = reader.read("src/books.xml");
        Element rootElement = document.getRootElement();

        //3 通过根元素获取每一个book标签对象
        List<Element> books = rootElement.elements("book");

        //4 遍历,处理每个book标签转换为book类
        for(Element book: books){
            //System.out.println(book.asXML());
            //asXMl()方法把标签对象,转换为标签字符串
            Element nameElement = book.element("name");
            //System.out.println(nameElement.asXML());
            String nameText = nameElement.getText();
            //getText()获取标签中的文本内容
            //System.out.println(nameText);

            String priceText = book.elementText("price");
            String authorText = book.elementText("author");
            //直接获取指定标签名的文本内容
            //System.out.println(priceText);

            String sn = book.attributeValue("sn");
            //获取指定标签的属性值
            //System.out.println(sn);

            Book newbook = new Book(sn, nameText, authorText, new BigDecimal(priceText));
            System.out.println(newbook);
        }
    }
}

输出结果:

Book{sn='SN123455', name='时间简史', author='霍金', price=75.00}
Book{sn='SN123456', name='Java教程', author='小明', price=35.00}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值