XML简单介绍

XML简单介绍

HTML 被设计用来显示数据。
XML 被设计用来传输和存储数据。
XML是作为Html的补充。

因为XML主要针对数据的存贮和传输,所以主要的规则是对数据进行结构化和规范化,但对标签及样式没有特殊的规定,理论上支持任意的 标签 和 属性

1.组成

头部声明
<?xml version="1.0" encoding="UTF-8" ?>
必须写在xml文件的顶头的位置,是一种特殊的声明。

元素(内容)

<student>
    <name>张三</name>
    <age>20</age>
</student>
<students>
    <student name="张三" age="20"/>
    <student name="张三" age="20"/>
    <student name="张三" age="20"/>
</students>

2.XML文件的约束

主要分为有两种约束的方式,
一种是DTD约束文件的方式,
一种是Schema约束文件的方式。

2.1 DTD约束的方式

  • 文件名以 .dtd 结尾
  • 它本身也是一个 xml 文件
  • 它里面定义了一些特殊的标签
//定义了一个web-app的标签
//且规范了它的子标签(顺序和个数)
// 可以出现0个或多个 servlet 子标签 
// 紧接着:0个或多个 servlet-mapping 子标签
// 紧接着:0个或1个 welcome-file-list 子标签 
<!ELEMENT web-app (servlet*,servlet-mapping* , welcome-file-list?) >

//定义servlet标签的规则
// 必须出现 servlet-name 子标签
// 0个或1个 description 子标签
// 必须出现 servlet-class 或者 jsp-file 子标签 (二选一)
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>


//定义servlet-mapping标签的规则
// 必须出现servlet-name子标签
// 必须出现 1个或多个 url-pattern 子标签
<!ELEMENT servlet-mapping (servlet-name,url-pattern+) >

//定义servlet-name 标签的规则
// #PCDATA 表示内容是文本内容。
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>

<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>

//定义 web-app 标签的属性列表的规则
// version 属性名 CDATA 是值的类型 #IMPLIED 表示可以有也可以没有
<!ATTLIST web-app version CDATA #IMPLIED>

2.2 Schema约束的方式

  • 文件的后缀名是 .xsd
  • 它也是一种特殊的 xml 文件

3.XML的解析

DOM

  • 跟HTML类似,是整个将XML文件加载到内容中,然后映射为Java对象,进行解析。
  • 弊端: 不适合处理大型的XML文件。
  • 优势:保留了节点的信息,方便操作。

SAX

  • 不是完整的加载整个XML文件,而是一边读,一边解析。
  • 优势: 可以处理大型的XML文件
  • 弊端: 它由于读取完成以后就丢弃信息,所以,无法操作XML文档,只能读取。

其中,最常见的是名为 dom4j 的一个库。
官网: https://dom4j.github.io/
解析SAX文件的代码案例:
同级包下创建了students.xml文档

package com.example.xml.parse;

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

import java.net.URL;
import java.util.Iterator;

/*
    读取XML文档的案例

    //1. 根据一个xml文档的 URL地址,解析出一个Document对象

    //2. 根据document对象的 getRootElement() 方法可以返回文档的根节点

    //3. 根据Element对象的
        elementIterator() 可以返回所有的子元素(迭代器)
        elements() 返回子元素列表
        element("name") 返回指定名称的唯一的子元素
        elementIterator("foo")  返回所有自定标签名的子元素(迭代器)
        elements("student") 返回指定名称的子元素列表
        attributeIterator();  返回元素的所有属性(迭代器)


        getName方法返回标签的名字
        attribute("name") 返回指定名称的属性 Attribute。
            Attribute对象有
                    getValue
                    getStringValue 返回对应的属性值

 */
public class DemoRead {

    public static void main(String[] args) throws DocumentException {
        //如何获取URL地址呢?
        URL url = DemoRead.class.getResource("students.xml");
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);

        //返回根节点 <students>
        Element students = document.getRootElement();

//        students.elements("student");


        Iterator iterator = students.elementIterator("student");
        while(iterator.hasNext()){
            Element student = (Element) iterator.next();
            //拿到每一个Student标签,我需要访问它的 name 属性
            String name = student.attribute("name").getStringValue();

            //获取Student的age子标签
            Element age = student.element("age");
            //如何获取 <age> 标签内部的文本呢?
            String ageText = age.getTextTrim();

            System.out.println(name+","+ageText);

        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值