XML的简单介绍及使用

目录

总体介绍

文档声明

元素

属性

注释

CDATA区

DOM4J


总体介绍

官方文档

https://www.w3school.com.cn/x.asp

  • XML 指可扩展标记语言
  • XML 被设计用来传输和存储数据
  • XML 可以做配置文件

XML文件的组成成分

  1. 文档声明
  2. 元素
  3. 属性
  4. 注释
  5. CDATA区
XML 文档应该遵循如下规则:
1 、有 XML 声明语句 <?xml version="1.0" encoding="utf-8"?>
2 、必须有且仅有一个根元素
3 、标签 区分大小写
4 、属性值用引号包起来
5 、标签一般成对出现
6、元素正确嵌套


文档声明

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

1、XML 声明放在 XML 文档的第一行 
2、XML 声明由以下几个部分组成: 
    version - -文档符合 XML1.0 规范,即版本号 
    encoding - -文档字符编码,比如"utf-8"

元素

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签
一个标签有如下几种书写形式:
    包含标签体:<a>标签体内容</a> 
    不含标签体的:<a></a>, 简写为:<a/>

一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套

注意
1.每个 XML 文档必须有且只有一个根元素
2.根元素要把其他所有元素包起来


XML 元素命名规则
  • 区分大小写,例如,<P>和<p>是两个不同的标记
  • 不能以数字开头
  • 不能包含空格
  • 名称中间不能包含冒号(:)
  • 如果标签单词需要间隔,建议使用下划线 比如 <book_title>hello</book_title>
  • 如果有特殊字符需要用转义字符代替

转义字符


属性

1.属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'
分隔)
2.一个元素可以有多个属性,它的基本格式为: <元素名 属性名="属性值">
3.特定的属性名称在同一个元素标记中只能出现一次
4.属性值不能包括 & 字符

注释

1. <!-- 这是一个注释 - ->
2. 注释内容中不要出现  - -  
3. 不要把注释放在标签里面;错误写法 <Name <!--the name-->>TOM</Name>
4. 注释不能嵌套;
5. 可以在除标签以外的任何地方放注释;

CDATA区

有些内容不想让解析引擎执行,而是当作 原始内容处理(即当做普通文本) ,可 以使用 CDATA 包括起来,CDATA区中的所有字符都会被当作简单文本,而不是 XML 标签。
1. 语法:
        <![CDATA[
                这里可以把你输入的字符原样显示,不会解析为 xml
        ]]>
2. 可以输入任意字符(除 ]]> 外)
3. 不能嵌套

DOM4J

一种用来对xml文件进行操作的工具

官方文档 :
1. DOM4J 是一个简单、灵活的开放源代码的库(用于解析/处理 XML 文件)。DOM4J 是由早期开发 JDOM 的人分离出来而后独立开发的。
2. 与 JDOM 不同的是,DOM4J 使用接口和抽象基类,虽然 DOM4J 的 API 相对要复杂一些,但它提供了比 JDOM 更好的灵活性。
3. DOM4J 是一个非常优秀的 Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的 DOM4J
4. 使用 DOM4J 开发,需下载 DOM4J 相应的 jar 文件。
1、读取 XML 文件,获得 document 对象
SAXReader reader = new SAXReader(); //创建一个解析器
Document document = reader.read(new File("src/input.xml"));//XML Document

2、解析 XML 形式的文本,得到 document 对象
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);

3、主动创建 document 对象
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement("members");

例子:

students.xml

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

<students>
    <student id="01">
        <name>学生1</name>
        <gender>女</gender>
        <age>16</age>
        <resume>班长</resume>
    </student>
    <student id="02">
        <name>学生2</name>
        <gender>男</gender>
        <age>17</age>
        <resume>群众</resume>
    </student>

</students>

xmlDOM.java

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

import java.io.File;
import java.util.List;

public class xmlDOM {
    public static void main(String[] args) throws DocumentException {

    }

    //加载xml文件
    @Test
    public void loadXML() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File("src/students.xml"));
        //从这里debug可查看载入的xml文件的内部结构
        System.out.println(document);
    }

    //遍历xml文件内的元素
    @Test
    public void listStus() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File("src/students.xml"));
//        System.out.println(document);
        Element rootElement = document.getRootElement();
        List<Element> student = rootElement.elements("student");
        for (Element element : student){
            Element name = element.element("name");
            Element gender = element.element("gender");
            Element age = element.element("age");
            Element resume = element.element("resume");
            System.out.println(name.getText() + "\t" + gender.getText() + "\t" + age.getText() + "\t" + resume.getText());
        }
    }

    //查看xml中的指定元素
    @Test
    public void readOne() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File("src/students.xml"));
//        System.out.println(document);
        Element rootElement = document.getRootElement();
        Element student = (Element)rootElement.elements("student").get(1);

        System.out.println(student.element("name").getText());
        System.out.println(student.element("gender").getText());
        System.out.println(student.element("age").getText());
        System.out.println(student.element("resume").getText());
        System.out.println(student.attribute("id").getText());
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值