XML基础学习总结

一、简介

xml:可扩展的标记性语言
xml的作用:

  1. 用来保存数据,且这些数据具有自我描述性
  2. 项目或模块的配置文件
  3. 作为网络传输数据的格式(现在JSON为主)

二、xml语法及规则

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 声明version 是版本的意思encoding 是编码-->
<books> <!-- 这是xml 注释-->
	<book id="SN123123413241"> <!-- book 标签描述一本图书id 属性描述的是图书的编号-->
		<name>java 编程思想</name> <!-- name 标签描述的是图书的信息-->
		<author>华仔</author> <!-- author 单词是作者的意思,描述图书作者-->
		<price>9.9</price> <!-- price 单词是价格,描述的是图书的价格-->
	</book>
	
	<book id="SN12341235123"> <!-- book 标签描述一本图书id 属性描述的是图书的编号-->
		<name>葵花宝典</name> <!-- name 标签描述的是图书的信息-->
		<author>班长</author> <!-- author 单词是作者的意思,描述图书作者-->
		<price>5.5</price> <!-- price 单词是价格,描述的是图书的价格-->
	</book>
</books>

xml元素是从开始标签到结束标签的部分
元素可以包含其他元素、文本,元素可以拥有属性

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

元素也分单标签和双标签
XML的每个属性必须用引号引起来
XML标签必须闭合
XML标签对大小写敏感
XML标签要正确嵌套

xml文档必须有根元素,根元素就是顶级元素(没有父标签),且必须唯一

特殊字符

&gt;
&lt;

文本区域(CDATA)
CDATA语法告诉xml解析器,内部数据为文本,不需要解析

<book sn="SN123" name="葵花宝典">
     <![CDATA[
        <<<>>>>
    ]]>
</book>

三、dom4j解析技术

html和xml都是标记性语言,都可以通过w3c组织指定的dom技术解析。

xml文档对象模型定义访问和操作xml的标准方法
DOM将XML文档作为一个树形结构,document对象表示整个文档

扫描二维码关注公众号,回复: 12440106 查看本文章

早期JDK 为我们提供了两种xml 解析技术DOM 和Sax

dom4j解析技术,属于第三方公司的技术。需要使用第三方给我们提供好的类库才可以解析xml 文件

简单例子:
将xml文件数据存入Book对象并打印
前提:需要导入dom4j的jar包

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--books.xml-->
<books>
    <book sn="SN12341232">
        <name>辟邪剑谱</name>
        <price>9.9</price>
        <author>班主任</author>
    </book>
    <book sn="SN12341231">
        <name>葵花宝典</name>
        <price>99.99</price>
        <author>班长</author>
    </book>
</books>

Book类

import java.math.BigDecimal;

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

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

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

    public String getSn() {
    
    
        return sn;
    }

    public void setSn(String sn) {
    
    
        this.sn = sn;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public double getPrice() {
    
    
        return price;
    }

    public void setPrice(double price) {
    
    
        this.price = price;
    }

    public String getAuthor() {
    
    
        return author;
    }

    public void setAuthor(String author) {
    
    
        this.author = author;
    }
}

测试代码

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

import java.util.List;

public class Dem4jTest {
    
    

   //@Test
   //这个需要引入junit包
    public void test(){
    
    
        //创建SAXReader,读取xml文件
        SAXReader saxReader=new SAXReader();
        try {
    
    
            //相对路径从模块名开始
            Document document = saxReader.read("src/books.xml");

            //通过document对象获取根元素
            Element rootElement=document.getRootElement();
            //System.out.println(rootElement);

            //通过根元素获取book对象,通过标签名查找子元素
            List<Element> books = rootElement.elements("book");
            for(Element book:books){
    
    
                //System.out.println(book.asXML());
                Element nameElement=book.element("name");
                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));
            }
        } catch (DocumentException e) {
    
    
            e.printStackTrace();
        }
    }
}

结果

Book{
    
    sn='SN12341232', name='辟邪剑谱', price=9.9, author='班主任'}
Book{
    
    sn='SN12341231', name='葵花宝典', price=99.99, author='班长'}

猜你喜欢

转载自blog.csdn.net/weixin_44759105/article/details/112781583