• day074:XML、XML的解析


    目录

    一、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。该属性可不写
    • 特殊字符:
      • <        <   小于号
      • >       >   大于号
      • &  &   和号
      • '  '    单引号
      • "  "    引号
    • XML文件中可以存在CDATA区,它相当于一个文本,可以在里面直接写内容
      • CDATA区格式:内容]]>

    4.XML文件代码示例

    1. "1.0" encoding="UTF-8" ?>
    2. <students>
    3. <student id="1">
    4. <name>张三name>
    5. <age>23age>
    6. <info>学生<老师info>
    7. <message> 学生,学生 < 老师]]>message>
    8. student>
    9. <student id="2">
    10. <name>李四name>
    11. <age>24age>
    12. student>
    13. 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文件

    1. "1.0" encoding="UTF-8" ?>
    2. <students>
    3. <student id="1">
    4. <name>张三name>
    5. <age>23age>
    6. <info>学生<老师info>
    7. <message> 学生,学生 < 老师]]>message>
    8. student>
    9. <student id="2">
    10. <name>李四name>
    11. <age>24age>
    12. student>
    13. students>

    (2)Student类

    1. package myXMLDemo_01;
    2. public class Student {
    3. private String id;
    4. private String name;
    5. private int age;
    6. public Student() {
    7. }
    8. public String getId() {
    9. return id;
    10. }
    11. public void setId(String id) {
    12. this.id = id;
    13. }
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. public int getAge() {
    21. return age;
    22. }
    23. public void setAge(int age) {
    24. this.age = age;
    25. }
    26. public Student(String id, String name, int age) {
    27. this.id = id;
    28. this.name = name;
    29. this.age = age;
    30. }
    31. @Override
    32. public String toString() {
    33. return "Student{" +
    34. "id='" + id + '\'' +
    35. ", name='" + name + '\'' +
    36. ", age=" + age +
    37. '}';
    38. }
    39. }

    (3)DOM4J解析student.xml文件

    1. public class XmlParse {
    2. public static void main(String[] args) throws DocumentException {
    3. //获取一个解析器
    4. SAXReader saxReader = new SAXReader();
    5. //利用解析器把xml文件加载到内存中,并返回一个文档对象
    6. Document document = saxReader.read(new File("myXML\\xml\\ student.xml"));//文件路径最好不要手敲,直接复制粘贴
    7. //获取根标签
    8. Element rootElement = document.getRootElement();
    9. //通过根标签获取所有子标签
    10. //elements():可以获取调用者所有的子标签,会把所有的子标签都放到一个集合中
    11. //List list = rootElement.elements();如果elements()里面不传入参数,则获取所有标签
    12. //如果elements()里面传入标签名,则获取指定标签名的标签
    13. List studentElements = rootElement.elements("student");
    14. //用来装学生对象的集合
    15. ArrayList list = new ArrayList<>();
    16. //遍历集合得到每一个子标签
    17. for (Element element : studentElements) {
    18. //获取id这个属性
    19. Attribute attribute = element.attribute("id");
    20. //获取id的属性值
    21. String id = attribute.getValue();
    22. //获取name标签
    23. //element("标签名"):获取调用者指定的子标签
    24. Element nameElement = element.element("name");
    25. //获取这个标签的标签体内容
    26. String name = nameElement.getText();
    27. //获取age标签
    28. Element ageElement = element.element("age");
    29. String age = ageElement.getText();
    30. //System.out.println(id);
    31. //System.out.println(name);
    32. //System.out.println(age);
    33. Student s = new Student(id, name, Integer.parseInt(age));
    34. list.add(s);
    35. }
    36. //遍历操作
    37. for (Student student : list) {
    38. System.out.println(student);
    39. }
    40. }
    41. }

  • 相关阅读:
    智云通CRM:做销售一定要慎说六种话,不然快成交的订单也会跑?
    IDEA启动项目很慢,无访问
    【译】Visual Studio 17.10 发布了新版扩展管理器
    测试技能提升篇——一文理解消息中间件里那些通用的核心概念
    【算法】银河英雄传说(带权并查集)
    【Paper】2020_Resilient Self/Event-Triggered Consensus Based on Ternary Control
    alsa pcm设备之硬件参数
    系统服务控制
    PDF转换工具哪个好?值得推荐的3款PDF转换软件
    VMware Workstation 12 安装windows_server_2016
  • 原文地址:https://blog.csdn.net/m0_57466457/article/details/128011559