首页 > 编程语言 >Spring源码-xml解析

Spring源码-xml解析

时间:2022-08-20 14:00:28浏览次数:65  
标签:xml String Spring equals SAX 源码 user orginal public

Spring使用SAX解析xml。SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

一、构建SAXParser

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(
    new File("F:\\ideaProject\\SeriTest\\src\\main\\resources\\user.xml"), new XmlHandle());

二、实现DefaultHandler自定义解析

点击查看代码
public class XmlHandle extends DefaultHandler {
  private User user;

  private String tag;

  public XmlHandle() {
    super();
  }

  @Override
  public void startDocument() throws SAXException {
    super.startDocument();
  }

  @Override
  public void endDocument() throws SAXException {
    super.endDocument();
  }

  @Override
  public void startElement(String uri, String localName, String qName, Attributes attributes)
      throws SAXException {
    this.tag = qName;
    if ("user".equals(qName)) {
      user = new User();
    }
    int length = attributes.getLength();
    for (int i = 0; i < length; i++) {
      String qName1 = attributes.getQName(i);
      if ("id".equals(qName1)) {
        user.setId(Long.parseLong(attributes.getValue(i)));
      }
    }
  }

  @Override
  public void endElement(String uri, String localName, String qName) throws SAXException {
    if ("user".equals(qName)) {
      System.out.println(user);
    }
  }

  @Override
  public void characters(char[] ch, int start, int length) throws SAXException {
    String s = new String(ch, start, length).trim();
    if (Objects.isNull(s) || s.length() < 1) {
      return;
    }

    if ("name".equals(tag)) {
      user.setName(s);
    } else if ("age".equals(tag)) {
      if (isPositiveInteger(s)) {
        user.setAge(Integer.parseInt(s));
      }

    } else if ("email".equals(tag)) {
      user.setEmail(s);
    }
  }

  private static boolean isMatch(String regex, String orginal) {
    if (orginal == null || orginal.trim().equals("")) {
      return false;
    }
    Pattern pattern = Pattern.compile(regex);
    Matcher isNum = pattern.matcher(orginal);
    return isNum.matches();
  }

  public static boolean isPositiveInteger(String orginal) {
    return isMatch("^\\+{0,1}[1-9]\\d*", orginal);
  }
}

标签:xml,String,Spring,equals,SAX,源码,user,orginal,public
From: https://www.cnblogs.com/shigongp/p/16607611.html

相关文章

  • Spring Boot调用api post接口
    SpringBoot调用apipost接口示例publicstaticStringsendPost(Stringurl,JSONObjectjsonObject){log.info("请求地址:{}",url);Stringbody......
  • Spring 03: 基于xml的构造方法注入
    注入方式具体有3种注入方式:通过构造方法的a.参数名称注入b.参数下标注入c.默认参数顺序注入参数名称注入School实体类packagecom.example.pojo03;public......
  • 基于SpringBoot的SSMP整合
    前言实体类开发————使用Lombok快速制作实体类Mapper开发————整合MyBatisPlus,制作数据层测试Service开发————基于MyBatisPlus进行增量开发,制作业务层测试......
  • 如何在Spring Boot Rest服务方法中设置响应头值
    如何在SpringBootRest服务方法中设置响应头值问题描述新手问题...我正在构建我的第一个SpringBootRestful服务.我的静态服务设计要求在响应头中返回一些数据. 推荐......
  • 通过Spring官网创建Spring Boot项目
    spring官网:https://start.spring.io/1、首先,在官网创建springboot项目:2、创建完毕后单击“GENERATE”网页会自动下载项目压缩包:3、解压demo.zip文件夹:4、打开IDEA......
  • Log4NET 日志分割删除与压缩解决思路(附源码)
    最近公司发现,日志产生的太多了,于是让我写个方法来解决,一开始是让我删除,后来想了想让我先压缩再删除文件夹,下面提供两个版本的源代码及简单使用。注:这两个代码也是博主CV的......
  • mybatisplus使用xml
    一、配置xml路径mybatis-plus:mapper-locations:classpath:mapper/*.xml二、编写Mapper里面的方法publicinterfaceUserMapperextendsBaseMapper{ListfindAll()......
  • 【小迪安全】04:基础入门-web源码扩展
    (XYCMS搬家公司建站系统)查找数据库文件路径: 发现后缀名为mdb文件——为asp网站特有的  打开mdb文件找到admin_user数据库可以找到用户名和密码 ......
  • SpringBoot整合Redis实现常用功能
    SpringBoot整合Redis实现常用功能建议大小伙们,在写业务的时候,提前画好流程图,思路会清晰很多。文末有解决缓存穿透和击穿的通用工具类。1登陆功能我想,登陆功能......
  • IDEA初始化创建SpringBoot项目
    创建SpringBoot打开新建项目配置项目基本需求其中URL改成:start.springboot.io创建完成后等待依赖包下载下载完成之后点击右侧Maven中的Lifecycle-install进行更新......