day074:XML、XML的解析

6 篇文章 0 订阅
2 篇文章 0 订阅

目录

一、XML

1.什么是XML

2.XML作用

3.XML语法规则

4.XML文件代码示例

二、解析XML文件

1.解析XML

2.常用的解析思想

(1)DOM思想

(2)图解

3.XML解析工具


一、XML

1.什么是XML

XML(EXtensible Markup Language):是一种可扩展的标记语言

  • 标记语言:通过标签来描述数据的语言
  • 可扩展:标签的名字可以自定义

2.XML作用

  • 用于进行存储数据和传输数据
  • 作为软件的配置文件

3.XML语法规则

  • XML文件的后缀名为xml
  • 文档声明必须是第一行第一列
    • 文档声明格式:<?xml version="1.0" encoding="UTF-8" standalone="" ?>
    • version:该属性是必须存在的,它的值固定是1.0
    • encoding:选择字符编码表;该属性可不写
    • standalone:描述该xml文件是否依赖其他的xml文件,取值为yes或no。该属性可不写
  • 特殊字符:
    • &lt;        <   小于号
    • &gt;       >   大于号
    • &amp;  &   和号
    • &apos;  '    单引号
    • &quot;  "    引号
  • XML文件中可以存在CDATA区,它相当于一个文本,可以在里面直接写内容
    • CDATA区格式:<![CDATA[内容]]>

4.XML文件代码示例

<?xml version="1.0" encoding="UTF-8" ?>
<!--注释:XML文件的创建:选择File
    XML文件的后缀必须是.xml-->

<!--本xml文件用来描述多个学生的信息-->
<students>
    <!--    第一个学生的信息-->
    <student id="1">
        <name>张三</name>
        <age>23</age>
        <!--        小于号的使用-->
        <info>学生&lt;老师</info>
        <!--        CDATA区的使用:相当于一个文本,可以直接在里面写内容-->
        <message><![CDATA[我叫张三,年龄是23岁,老师 > 学生,学生 < 老师]]></message>
    </student>
    <!--    第二个学生的信息-->

    <student id="2">
        <name>李四</name>
        <age>24</age>

    </student>

</students>

二、解析XML文件

1.解析XML

就是获取xml文件里的每一个值

2.常用的解析思想

(1)DOM思想

DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看成对应的对象。

Document对象:整个xml文档

Element对象:所有标签

Attribute对象:所有属性

Text对象:所有文本内容(标签体:即标签里的内容)

(其中Element对象、Attribute对象、Text对象有一个共同的父类:Node对象

(2)图解

当写完xml文件后,整个文档就会形成一个Document对象,开始获取里面的内容:先获取根标签students,再获取子标签student,再获取子标签内的属性id,标签name、age,标签体:即标签里的内容。

3.XML解析工具

常见的解析工具有JAXP、JDOM、DOM4J、PULL

dom4j-1.6.1.jar包导入方式:

 

利用DOM4J解析,代码示例:
(1)student.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--注释:XML文件的创建:选择File
    XML文件的后缀必须是.xml-->

<!--本xml文件用来描述多个学生的信息-->
<students>
    <!--    第一个学生的信息-->
    <student id="1">
        <name>张三</name>
        <age>23</age>
        <!--        小于号的使用-->
        <info>学生&lt;老师</info>
        <!--        CDATA区的使用:相当于一个文本,可以直接在里面写内容-->
        <message><![CDATA[我叫张三,年龄是23岁,老师 > 学生,学生 < 老师]]></message>
    </student>
    <!--    第二个学生的信息-->

    <student id="2">
        <name>李四</name>
        <age>24</age>

    </student>


</students>

(2)Student类

package myXMLDemo_01;

public class Student {
    private  String id;
    private  String name;
    private  int age;

    public Student() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

(3)DOM4J解析student.xml文件

public class XmlParse {
    public static void main(String[] args) throws DocumentException {
        //获取一个解析器
        SAXReader saxReader = new SAXReader();
        //利用解析器把xml文件加载到内存中,并返回一个文档对象
        Document document = saxReader.read(new File("myXML\\xml\\ student.xml"));//文件路径最好不要手敲,直接复制粘贴
        //获取根标签
        Element rootElement = document.getRootElement();
        //通过根标签获取所有子标签
        //elements():可以获取调用者所有的子标签,会把所有的子标签都放到一个集合中
        //List list = rootElement.elements();如果elements()里面不传入参数,则获取所有标签
        //如果elements()里面传入标签名,则获取指定标签名的标签
        List<Element> studentElements = rootElement.elements("student");

        //用来装学生对象的集合
        ArrayList<Student> list = new ArrayList<>();


        //遍历集合得到每一个子标签
        for (Element element : studentElements) {
            //获取id这个属性
            Attribute attribute = element.attribute("id");
            //获取id的属性值
            String id = attribute.getValue();

            //获取name标签
            //element("标签名"):获取调用者指定的子标签
            Element nameElement = element.element("name");
            //获取这个标签的标签体内容
            String name = nameElement.getText();

            //获取age标签
            Element ageElement = element.element("age");
            String age = ageElement.getText();


            //System.out.println(id);
            //System.out.println(name);
            //System.out.println(age);


            Student s = new Student(id, name, Integer.parseInt(age));
            list.add(s);

        }
        //遍历操作
        for (Student student : list) {
            System.out.println(student);
        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZQyyds:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值