首页 > 其他分享 >XML简单了解

XML简单了解

时间:2023-01-07 10:35:08浏览次数:29  
标签:XML xml String age address 了解 简单 name

XML

一、XML基础

1、XML概述:

​ XML的全称为(Extensible Markup Language),是一种可扩展的标记语言

​ 标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称值为元素)

​ 可扩展:标签的名字是可以自己定义的

语法规则 示例代码
使用一对尖括号和一组合法标识符组成
在xml标签往往是成对出现,有开始也有结束
在xml有些特殊的标签也可以不成对出现,但是必须要存在结束标记
在xml中标签可以定义属性,但是属性必须通过引号引起来
标签可以进行正确嵌套 zs
2、XML作用:

​ 用于进行存储数据和传输数据(把数据按照xml文件格式存储起来,并且可以把xml文件作为数据的载体在多个系统之间进行传输)

​ 作为软件的配置文件(可以把软件在运行时所需要的一些信息按照xml文件的格式配置到文件中)

3、XML语法规则:
语法规则 示例代码
xml文件的后缀名普遍都是xml user.xml,student.xml
xml要有文档声明,文档声明必须是第一行第一列
xml必须要存在一个根标签,并且有且仅有一个
xml文件中可以定义注释信息
文件中可以存在以下特殊符号 &It; >(这里使用了中文符号)
xml文件中可以存在CDATA区(用于直接表示特殊符号) b]]>

文档声明属性说明:

​ version:必须的,声明当前xml文件的版本。一般我们使用的都是1.0

​ encoding:不是必须的,字符集,是使用浏览器打开的时候采用的默认的字符集编码

​ standalone:不是必须的,描述XML文档是否需要依赖其它的文件

4、如何验证XML是否正确:

有两种方式:

​ 通过idea开发工具进行校检,如果xml编写的有问题,idea会给出错误的提示信息

​ 通过浏览器打开,如果可以正常显示xml文件的内容,那么就说明我们所编写的xml文件没有问题,

​ 如果我们编写的xml文件是存在问题的,那么在使用浏览器打开的时候就会出错

二、XML解析思想

​ 所谓解析就是从xml中获取到数据

​ 常见的解析思想:DOM(Document Object Model)文档对象模型,就是把文档的各组成部分看做成对应的对象

说明:

​ 使用一个Document对象来代表整个xml文档

​ xml文档中的标签(元素),使用Element对象表示

​ 一对标签中 (<>这里<>)的文本内容,使用Text对象表示

​ 标签的属性,使用Attribute对象表示

​ Element,Text,Attribute这几个对象存在一个公共的父类就是Node

针对这种解析思想,不同的公司提供了不同的API的实现

常见的解析技术:

​ JAXP: SUN公司提供的一套XML的解析的API

​ JDOM: 开源组织提供了一套XML的解析的API-jdom

DOM4J: 开源组织提供了一套XML的解析的API-dom4j

​ pull: 主要应用在Android手机端解析XML

三、XML解析案例

需求:使用DOM4J解析students.xml文件,将解析到的数据封装到学生对象中,并将学生对象存储到ArrayList集合中,最后遍历集合

实现步骤:

​ 创建学生类(id,name,age,address)

​ 导入jar包(dom4j-1.6.1.jar)

​ 创建解析器(可以参考dom4j文档中的index.html文件中的Quick start条目进行创建)

​ 通过解析器读取xml文档数据,得到Document对象

​ 获得根节点元素对象

​ 从根节点下查找其他的节点元素,读取数据

参考代码:

package com.itheima;

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

    public Student(){

    }

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

    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 String getAge() {
        return age;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<students>
    <student id = "stu001">
        <name>张三</name>
        <age>30</age>
        <address>重庆</address>
    </student>
    <student id = "stu002">
        <name>李四</name>
        <age>33</age>
        <address>四川</address>
    </student>
</students>
package com.itheima;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
/*
    需求:使用DOM4J解析students.xml文件,将解析到的数据封装到学生对象中,并将学生对象存储到ArrayList集合中,最后遍历集合
 */
public class XMLParseDemo {
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        //创建解析器
        SAXReader saxReader = new SAXReader();

        //获取Document对象
        Document document = saxReader.read(new FileInputStream("itheima-xml\\students.xml"));

        //获取根节点对象
        Element rootElement = document.getRootElement();

        //从根节点来查找其他的节点元素
        List<Element> elements = rootElement.elements("student");

        //定义存储学生对象的集合
        ArrayList<Student> students = new ArrayList<Student>();

        //遍历集合获得每一个学生元素
        for(Element studentElement : elements){
            //获取属性对象
            Attribute attribute = studentElement.attribute("id");
            //获取id属性的值
            String id = attribute.getValue();

            //获取name元素
            Element nameElement = studentElement.element("name");
            //获取name元素对应的内容
            String name = nameElement.getText();

            //获取age元素
            Element ageElement = studentElement.element("age");
            //获取age元素对应的内容
            String age = ageElement.getText();

            //获取address元素
            Element addressElement = studentElement.element("address");
            //获取address元素对应的内容
            String address = addressElement.getText();

            //将数据封装到学生对象中
            Student s = new Student();
            s.setId(id);
            s.setName(name);
            s.setAge(age);
            s.setAddress(address);

            students.add(s);
        }

        //遍历存储学生数据的集合
        //使用lambda表达式的方式遍历
        students.forEach(s -> System.out.println(s));
    }
}

四、XML文档约束

​ xml文件最常见的作用就是作为软件的配置文件,那么解析xml文件的代码一般都是提前编写好的,而我们程序员只需要编写xml文件就可以了,但是如果编写这个xml文件时没有按照解析的要求去编写,而是随意去定义标签,那么在解析代码的时候势必就会出现问题

如何限定程序员在xml文件中去定义哪些标签呢?

​ 我们就需要了解一下xml文件的约束技术

​ 简单来说:xml文档约束技术,就是用来限定xml文件中可使用的标签以及属性

xml文件常见的约束技术有两种:

​ dtd

​ schema

标签:XML,xml,String,age,address,了解,简单,name
From: https://www.cnblogs.com/fragmentary/p/17032196.html

相关文章

  • 20 张图带你全面了解 HTTPS 协议,再也不怕面试问到了!
    本文详细介绍了HTTPS相较于HTTP更安全的原因,包括对称加密、非对称加密、完整性摘要、数字证书以及SSL/TLS握手等内容,图文并茂、理论与实战结合、建议收藏!1.不安......
  • top的简单学习
    获取当前进程的全部线程jps获取jvm的进程信息.top-Hp$pid-bn1>1.txt可以获取当前特定进程的所有子进程.注意linux与Windows的不太一样.linux下面的线程实现,......
  • 简单说说:Stream.reduce()用法解析
    基本使用先举一个简单的例子:算法题:Words题目描述每个句子由多个单词组成,句子中的每个单词的长度都可能不一样,我们假设每个单词的长度Ni为该单词的重量,你需要做的就是给出整......
  • Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/datatype/jsr310
    Causedby:java.lang.NoClassDefFoundError:com/fasterxml/jackson/datatype/jsr310/ser/ZoneIdSerializer 1、报错信息SpringBoot项目启动的时候,报错如下:Caused......
  • [记]python操作xml文件
    test.xml<A><AA><AAAname="aaa">AaA</AAA><BBB></BBB></AA><BB><CCCname="ccc">CcC</CCC><DDD></DDD></BB&g......
  • Microsoft cl编译器在命令提示符下的简单示例
    此刻我的电脑环境win10,64位,vs2022 由于安装的vs版本的不同,有一些函数库,比如stdio.h这个头文件不一定如有些博客所说在vs的安装目录下即:C:\ProgramFiles(x86)\Mi......
  • 一道 “简单” 的 数学题
    数学吧  《一道“简单*的数学题》    https://tieba.baidu.com/p/8209973323   。 这题我还没做,  一起看看  。     @黎合胜  @小......
  • 一个简单的用于检验digest认证的脚本
    最近做了不少需要联调的项目,常遇到接口digest认证问题,对接时常有digest请求不对的情况。为了防止扯皮,写了一个脚本用来校验digest和试错。记录一下。HA1=MD5(A1)=MD5(user......
  • java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalo
    一、问题复现这个问题困扰我一天多,各种百度看论坛,发现有一种解决方案可能对我有帮助(解决方案)解决方案说的是可能是xerces包冲突所致Causedby:java.lang.AbstractMe......
  • js原生xhr请求XMLHttpRequest
    创建一个请求实例,发送请求varxhr=newXMLHttpRequest();xhr.open('GET','test.php');xhr.send();监控XMLHttpRequest对象的状态变化xhr.onreadystatechange=......