ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Spring源码-xml解析

2022-08-20 14:00:50  阅读:170  来源: 互联网

标签: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
来源: https://www.cnblogs.com/shigongp/p/16607611.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有