0%

【JavaWeb】XML

关于xml的认识


1 简介

  • xml介绍:xml是可拓展的标记性语言
  • xml作用
  • 1、保存数据
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- Student[id=1, name="张三"] xml的数据保存方法 -->
    <students>
    <student>
    <id>1</id>
    <name>张三</name>
    </student>
    <student>
    <id>2</id>
    <name>李四</name>
    </student>
    </students>
  • 2、作为项目/框架的配置文件
  • 3、作为网络传输数据的格式(已淘汰,主流使用JSON)

2 语法

  • 1、声明
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8" ?>
    <!--
    version:版本号
    encoding:编码
    -->
  • 2、标签命名规则
  • 1 标签名可含有字母、数字、其他字符
  • 2 不能以数字/标点符号开头
  • 3 名称不能包含空格
  • 3、根元素(没有父标签的元素)不能出现同名
  • 4、文本区域(CDATA区)
  • 告诉xml,里面的内容只是纯文本,不需要进行解析
    1
    <![CDATA[ 输入字符,例如'>','<',就不会进行解析,会直接显示 ]]>

3 xml解析

  • xml为标记型文档,可以使用w3c组织制定的dom技术进行解析

3.1 dom4j解析

  • (1)依赖
    1
    2
    3
    4
    5
    6
    <!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
    <dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version>
    </dependency>
  • (2)准备xml文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8" ?>
    <!-- 解析数据 -->
    <books>
    <book id="1">
    <name>java入门</name>
    <price>99</price>
    </book>
    <book id="2">
    <name>javaweb</name>
    <price>50</price>
    </book>
    </books>
  • (3)准备实体类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 使用了lombok注解
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Book {
    private int id;
    private String name;
    private BigDecimal price;
    }
  • (4)运行解析案例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @Test
    public void parseTest() throws Exception{
    // 1 创建SAXReader输入流,取出xml文件,从而生成Document对象(SAX:Simple Analysis for XML)
    SAXReader saxReader = new SAXReader();
    Document document = saxReader.read("./src/main/resources/xml/sample.xml");

    // 2 获取根标签元素
    Element rootElement = document.getRootElement();

    // 3 查询特定子标签
    List<Element> books = rootElement.elements("book");

    // 4 遍历标签,并获取里面的文本内容,封装为Book对象
    for (Element book : books) {
    // 获取标签属性值
    int id = Integer.parseInt(book.attributeValue("id"));
    // 间接获取子标签文本
    String name = book.element("name").getText();
    // 直接获取子标签文本
    BigDecimal price = new BigDecimal(book.elementText("price"));
    // 封装为Book对象并打印
    System.out.println(new Book(id, name, price));
    }
    }