XML(XML概述、XML约束、XML解析)

Part01 :XML概述

1、XML:可扩展的标记语言。

  • 可扩展的:扩展性特别强,语法上比较松
  • 标记:如:

2、XML的作用:

  • 存放数据
  • 配置文件

3、XML语法:

  • 文档声明:<?xml version=“1.0" encoding="UTF-8"?>
    • 文档声明必须以<?xml开头,以?>结束,中间没有空格
    • 文档声明必须从文档的0行0列位置开始
    • 文档声明只有两个属性,格式:属性名=“属性值”,属性值必须使用”"
      • version:指定XML文档版本。必须属性,一般使用1.0
      • encoding:指定当前文档的编码。可选属性,默认值为UTF-8。
  • 注释:<!--注释写这里面,可以单行也可以多行 -->
  • 元素(Element)/标签(Tag):
    • 普通元素的结构由开始标签、元素体和结束标签组成。如:<a>你好</a>
    • 元素体可以写也可以不写,当标签没有元素体的时候可以使用自闭和标签<标签名/>
    • 元素体里面可以是文本也可以写其他标签
    • 元素命名:
      • 区分大小写
      • 不能使用空格,冒号第特殊字符
      • 不建议以XML、xml、Xml开头
    • 格式化良好的xml文档,必须只有一个根元素
  • 属性:attribute
    • 属性是元素的一部分,它必须出现在元素的开始标签中
    • 属性的定义格式:属性名=“属性值”,其中属性值必须使用单引号或双引号
    • 一个元素可以有0-N个属性,但一个元素中不能出现同名属性
    • 属性名不能使用空格,冒号第特殊字符,且必须以字母开头
  • 转义字符:
    在这里插入图片描述
  • CDATA区:<![CDATA[大量需要转译的字符]]>
    • 当内容中出现了大量需要转译的字符时,xml提供CDATA区自动转译

Part02:XML约束

1、XML约束

  • 在XML技术中,可以编写一个文档来约束一个XML文档的书写规范,称为XML约束;
  • 常见的XML约束:DTD约束、Schema约束

2、根据DTD约束写XML文档:

  • 在自己要编写的XML文档中引入DTD约束文件
  • 引入语法一般在DTD文档开头的注释中
  • 如:第一个xx表示根标签名,后面为DTD约束名
  • 符号和意思:
    • ?:表示该标签出现的次数是0或者1;
    • *:表示该标签出现的次数是任意次;
    • +:表示该标签出现的次数大于等于1;
    • |:表示多个标签选一个出现;
    • ,:表示多个标签必须按照先后顺序出现

3、三种DTD约束:

  • 内部DTD,在XML文档内部嵌入DTD,只对当前XML有效
  • 外部DTD-本地DTD,DTD文档在本地系统上,公司内部自己项目使用
  • 外部DTD-公共DTD,DTD文档在网络上,一般由框架提供

4、Schema约束:

  • Schema约束是新的XML文档约束,比DTD强大很多,是DTD替代者
  • Schema约束本身也是XML文档,但是Schema约束的扩展名为xsd
  • Schema约束功能更强大,数据类型更完善
  • Schema约束支持名称空间(类似Java的包)
    5、根据Schema约束写XML文档:
  • 在自己要编写的XML文档中引入DTD约束文件
  • 引入语法一般在Schema约束文档开头的注释中
  • 引入的为XML文档中的根标签的开始标签,自己补齐结束标签和元素体

Part03:XML解析

1、XML解析概述:
当将数据存储在XML后,我们就希望通过程序获得XML的内容。因此,人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作XML。
2、解析方式和解析器:

  • 开发中常见的解析方式:
    • DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
      • 优点:元素与元素之间保留结构关系,可以进行增删改查操作;
      • 缺点:XML文档过大时,可能出现内存溢出现象;
    • SAX:是一种速度更快,更有效的方法。它逐行扫描文件,一边扫描一遍解析。并以事件驱动的方式进行具体解析,每解析一行,都将触发对应的事件。
      • 优点:处理速度快,可以处理大文件。
      • 缺点:只能读,逐行解析后将释放资源。
    • PULL:Android内置的XML解析方式,类似SAX。
  • 解析器:就是根据不同的解析方式提供的具体实现。有的解析器过于繁琐,为了方便开发,又提供易于操作的解析开发包。
  • 常见的解析开发包:
    • JAXP:sun公司提供的支持DOM和SAX开发包;
    • JDom:dom4j兄弟开发的;
    • jsoup:一种处理HTML特定解析开发包;
    • Dom4J :比较常用的解析开发包,hibernate底层采用;

3、使用Dom4J的API解析XML文件

  • 1.把整个要解析的XML文件加载到内存(Dom4J提供了一个核心类SAXReader,用来加载XML文件)

  • 2.通过SAXReader的read()方法获取Document对象

  • 3.通过Document对象的getRootElement()方法获取根标签

  • 4.通过根标签的attributeValue(属性名)获取根标签的属性值

  • 5.通过根标签的elements方法获取根标签的子标签集合

  • 6.遍历子标签集合

      //把整个要解析的XML文件加载到内存
       SAXReader reader = new SAXReader();
       //获取Document对象
       Document document = reader.read(new File("beans.xml"));
       //获取根标签
       Element rootEle = document.getRootElement();
      //获取根标签的属性
       String value = rootEle.attributeValue("name");
       System.out.println(value);
       //获取根标签的子标签,集合
       List<Element> beanElements = rootEle.elements();
       //遍历子标签bean集合
       for (Element e1:beanElements
            ) {
           //获取子标签bean的名字
           System.out.println(e1.getName());
           //获取子标签bean的属性
           String idValue = e1.attributeValue("id");
           String classNameValue = e1.attributeValue("className");
           System.out.println(idValue+":"+classNameValue);
           //获取子标签bean的子标签property集合
          List<Element> propertyElements = e1.elements();
          //遍历子标签property集合
           for (Element e2:propertyElements
                ) {
               //获取字标签property的名字
               System.out.println(e2.getName());
               //获取子标签property的属性
               String nameValue = e2.attributeValue("name");
               String valueValue = e2.attributeValue("value");
               System.out.println(nameValue+":"+valueValue);
           }
       }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值