XML-入门级

1.什么是XML?

  • XML 指可扩展标记语言(eXtensible Markup Language),就是开发者可以在符合XML命名规则的基础之上,可以根据自己的需求定义自己的标签;

2.XML是怎么来的?

在这里插入图片描述

3.和HTML的对比:

HTMLXML
作用显示数据传输和存储数据
语法无特殊要求要求嵌套、配对,并遵循DTD的树形结构
空格多个时只显示一个输入几个i显示几个
与数据库的关系无直接联系与关系型和层状数据库均可对应与转换
大小写敏感性不区分区分

4.XML的作用是什么?

  • XML主要作用是用来存储数据(可以理解为充当一个小型数据库)
  • 传输约定格式的文件
  • 做软件的配置文件,【配置文件,保存软件设置的文件】

5.解析XML文件的方法:

  • DOM
  • DOM4J
  • SAX

5.1 DOM4J解析xml文件

DOM4J是对DOM方法进行了封装,dom解析的方式非常繁琐 !所以这里只说DOM4J方式

5.1.1 导入dom4j的jar包

<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
	<dependency>
	    <groupId>dom4j</groupId>
	    <artifactId>dom4j</artifactId>
	    <version>1.6.1</version>
	</dependency>

5.1.2 DOM4J常用的对象

  • SAXReader(解析器):读取xml文件到Document树结构文件对象
  • Document:是一个xml文档对象树,类比 Html文档对象。
  • Element:元素节点。通过Document对象可以查找单个元素

5.1.3 DOM4J使用步骤:

  • 1.创建解析器
      SAXReader saxReader = new SAXReader();
    
  • 2.通过解析器的read()方法将配置文件读取到配置文件中 生成一个document[org.dom4j]对象树
      Document document = saxReader.read("F:\\ideaFile\\endfile\\src\\main\\resources\\sutdent.xml");
    
  • 3.获取根节点
       Element root = document.getRootElement();
    
  • 4.通过iterator遍历根节点root来获取子节点student
    这部分代打看下面实例!
    

5.1.4 DOM4J使用实例:

前提是你有一个xml文件 !

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student>
        <name>张安</name>
        <age>18</age>
        <sex></sex>
    </student>
    <student>
        <name>李四</name>
        <age>12</age>
        <sex></sex>
    </student>
    <student>
        <name>我想回家</name>
        <age>12</age>
        <sex></sex>
    </student>
    <student>
        <name>王五</name>
        <age>89</age>
        <sex></sex>
    </student>
</students>

文件位置 :
在这里插入图片描述
编写解析xml的class类 :

package com.buba.Dom4J;

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

import java.util.Iterator;

public class dom4j {
    public static void main(String[] args) {
        try {
            //创建解析器
            SAXReader saxReader = new SAXReader();
            //通过解析器的read()方法将配置文件读取到配置文件中  生成一个document[org.dom4j]对象树
            Document document = saxReader.read("F:\\ideaFile\\endfile\\src\\main\\resources\\sutdent.xml");
            //获取根节点
            Element root = document.getRootElement();
            //开始遍历根节点
            for (Iterator<Element> iterator = root.elementIterator();iterator.hasNext();) {
                Element stuelement = iterator.next();
                for (Iterator<Element> innerIter = stuelement.elementIterator();innerIter.hasNext();){
                    Element next = innerIter.next();
                    String stringValue = next.getStringValue();
                    System.out.println(stringValue);
                }
                System.out.println("==========================================");
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

部分输出结果
在这里插入图片描述


5.2 SAX解析xml文件

  • SAX(Simple API for XML) 是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。 — 百度百科

5.2.1 SAX解析方式

事件驱动,边读边写

5.2.2 SAX执行过程

在这里插入图片描述

5.2.3 SAX优点

无需将整个文档加载到内存中,所以内存消耗少,适合解析特别大的XML文件

5.2.4 SAX解析四部曲

(1) 创建解析工厂,通过newInstance()方法获取

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();

(2) 创建解析器

SAXParser saxParser = saxParserFactory.newSAXParser();

(3) 调用解析器parser方法,传入两个参数:xml文件路径,时间处理器

saxParser.parse("F:\\**resources\\person.xml",new MyDeafultHander());        

(4) 创建一个类,继承DefaultHander类,重写三个方法:

  • A、startElement 获取开始标签,重要的两个参数说明
    • a、qName:把标签名称返回
    • b、attributes:返回标签中的属性对象
  • B、character 获取标签文本内容
  • C、endElement 获取结束标签
    -

5.2.5 实例:获取person文件并原样打出

  • 准备person,xml文件
    在这里插入图片描述
  • 编写personTest类
      package com.buba.xmlTest;
      
      import org.xml.sax.Attributes;
      import org.xml.sax.SAXException;
      import org.xml.sax.helpers.DefaultHandler;
      
      import javax.xml.parsers.ParserConfigurationException;
      import javax.xml.parsers.SAXParser;
      import javax.xml.parsers.SAXParserFactory;
      import java.io.IOException;
      
      public class SAXParserTest {
          public static void main(String[] args) {
              try {
                  //创建解析工厂
                  SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
                  //创建解析器
                  SAXParser saxParser = saxParserFactory.newSAXParser();
                  //调用解析器的parser方法
                  saxParser.parse("F:\\ideaFile\\endfile\\src\\main\\resources\\person.xml",new MyDeafultHander());
              } catch (ParserConfigurationException | IOException e) {
                  e.printStackTrace();
              } catch (SAXException e) {
                  e.printStackTrace();
              }
          }
      }
      class MyDeafultHander extends DefaultHandler{
          @Override
          public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
              System.out.print("<"+qName+">");
          }
      
          @Override
          public void characters(char[] ch, int start, int length) throws SAXException {
              System.out.println(new String(ch,start,length));
          }
      
          @Override
          public void endElement(String uri, String localName, String qName) throws SAXException {
              System.out.println("<"+qName+">");
          }
      
      }
    
  • 启动main方法测试
    在这里插入图片描述
    测试成功 over

5.3 这两种解析方式的对比

  • dom4j
    • 优点:
      ①. 大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。
      ②. 支持XPath。
      ③. 有很好的性能。
    • 缺点:
      ①. 大量使用了接口,API较为复杂。
  • SAX:
    • 优点:
      ①:不需要等所有数据都被处理完毕,就能立即开始分析。
      ②:只在读取数据时检查数据,不需要保存在内存中。
      ③:能在某个条件得到满足的时候停止解析,不用解析整个文档,提高效率。
      ④:效率和性能较高,能解析大于系统内存的文档。
    • 缺点:
      ①:需要应用程序自己负责TAG的处理逻辑,文档越复杂程序就越复杂。
      ②:单向导航,无法定位文档层次,难以同时访问同一文档中的不同部分数据,并且不支持XPath。

本节完

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值