最近遇到的工作内容都是和xml内容解析相关的.

1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理.

2.xml内容保存在blob字段中,然后jdbc读取blob字段获取xml内容进行解析.

解析的方法挺简单的,网上有很多种,主要有SAX,DOM4J等.

先来揭晓一下DOM4J是如何解析xml文件的,话不多少,直接上码.

    /*** 获取xml文件绝对路径*/private String getFilePath() {String fileName = "test.xml";String filePath = System.getProperty("user.dir").replace("\\", "/")return filePath+"/"+fileName;}

    /*** 解析获取xml节点数据*/private Map<String,String> parseXml(String filePath) {File xmlFile = new File(filepath);SAXReader reader = new SAXReader();Map<String,String> paramMap = new HashMap<String,String>();try {Document document = reader.read(xmlFile);Element rootElement = document.getRootElement();Element nameElement = rootElement.element("name");String name = nameElement.getText();paramMap.put("name",name);Element telElement = rootElement.element("tel");String tel = telElement.getText();paramMap.put("tel",tel);Element addressElement = rootElement.element("address");String address = addressElement.getText();paramMap.put("address",address);            } catch (Exception e) {logger.error("解析xml文件出错", e);}return paramMap;}

解析的xml文档如下

<?xml version="1.0" encoding="UTF-8"?>
<RootElement><name>黑天鹅</name><tel>12345678</tel><address>反脆弱训练基地</address>
</RootElement>

然后我们揭晓一下SAX是如何进行xml解析的,直接上码.

    /*** xml文件内容解析* * @param fileName* @return map* @throws Exception*/public Map<String, String> parseXmlContent(byte[] fileContent) {Map<String, String> dataMap = new HashMap<String, String>();if (fileContent.length <= 0) {logger.error("获取文件流出错,文件流为空");return null;}try {ByteArrayInputStream input = new ByteArrayInputStream(fileContent);SAXParserFactory parsefactory = SAXParserFactory.newInstance();SAXParser parser = parsefactory.newSAXParser();SAXParseHandler parseHandler = new SAXParseHandler();parser.parse(input, new SAXParseHandler());dataMap = parseHandler.getXmlMap();} catch (Exception e) {System.out.println(e);logger.error("xml文件解析错误", e);return null;}return dataMap;}

SAX自定义一个解析类.

class SAXParseHandler extends DefaultHandler {private static Map<String, String> map;private String tagName;private StringBuilder sb;public void startDocument() throws SAXException {super.startDocument();map = new HashMap<String, String>();}public void endDocument() throws SAXException {super.endDocument();}/*** 获取文档属性,内容,执行多次*/public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);//在此可以获取标签属性内容this.tagName = qName;sb = new StringBuilder();}/*** 获取标签值,执行多次*/public void endElement(String uri, String localName, String qName) throws SAXException {String data = sb.toString();if (StringUtils.isNotBlank(tagName)) {switch (tagName) {case "name":map.put("name", data);break;case "tel":map.put("tel", data);break;case "address":map.put("address", data);break;default:break;}}}public Map<String, String> getXmlMap() {return map;}/*** 获取整个文档数据*/public void characters(char[] ch, int start, int length) throws SAXException {sb.append(new String(ch, start, length));}

测试主方法(开发时候用的,按需调试即可)

    public static void main(String[] args) throws IOException {File file = new File("F:\\test.xml");FileInputStream input = new FileInputStream(file);ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] bt = new byte[1024];int n;while((n = input.read(bt)) != -1){output.write(bt, 0, n);}input.close();output.close();byte[] filebyte = output.toByteArray();XmlParser par = new XmlParser();Map<String, String> dataMap = par.parseXmlContent(filebyte);System.out.println(dataMap);        }

在解析xml的时候遇到了很多奇葩坑,用户标签不规范,发过来的数据没有标签的,还有发过来空文件的,真真够了.

尤其在解析blob字段中的xml内容数据时,也存在一些坑,到时候解决了在更新.

转载于:https://www.cnblogs.com/fxust/p/7498044.html

XML文件解析-DOM4J方式和SAX方式相关推荐

  1. XML文件解析之--DOM与SAX

    xml文件又称'可扩展性标记语言',可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml ...

  2. dom4j工具类_基于DOM4J的XML文件解析类

    XML文件解析分四类方式:DOM解析:SAX解析:JDOM解析:DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于ja ...

  3. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  4. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  5. java怎么xml文件解析_Java对Xml文件解析

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...

  6. 【VOC格式xml文件解析】——Python

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/26 12:49 # @Author : @linlianqin # @S ...

  7. XML - XML学习/XML文件解析器(C++)实现

    XML - XML学习/XML文件解析器(C++)实现 XML概述 ​ XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...

  8. Java - XML文件解析

    Java对XML文件的解析 一.前言 二.实例分析 - DOM方式解析XML文件 2.1 XMLDomParseUtil - 抽象工具类 2.2 待解析xml文件示例 2.3 解析xml文件 2.3. ...

  9. Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)

    Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...

最新文章

  1. set.difference() 的用法(python3)_Python 集合 difference_update() 使用方法及示例
  2. Lua1.0 代码分析 库
  3. 网络安全等保定级_网络安全防护专项检查迫在眉睫, 青莲帮您快速定级备案和评测...
  4. linux父设备,linux 设备模型---学习记录(二)
  5. HTML比较常用的标签
  6. 干货-iOS、mac开源项目及库,以后我也会持续更新。
  7. html代码里面换图片不显示不出来了,微擎 Ueditor 百度编辑器 替换图片不显示问题...
  8. mysql column legnth too big for_Column length too big for column 'Flist' (max = 21845);
  9. matlab单元数组和结构,Matlab中单元数组和结构数组
  10. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛.J强迫症的序列
  11. 《中国新能源汽车舆情报告2021》发布 |特斯拉“车顶维权”占据年度十大舆情事件之首...
  12. 《房地产证》与《房屋所有权证》或《房产证》有什么区别
  13. 【水晶报表内功心法】--公式、函数与运行时总计 注:(文章来自阿泰博客)
  14. pat basic 1082 射击比赛
  15. java 登录失效时间_详谈Java设置session超时(失效)的时间
  16. c++-派生类型与常量
  17. 自己搭深度学习环境踩坑血泪史
  18. 好吧,cnblogs给我的下马威
  19. Mac 命令行中操作剪切板
  20. 机械制造及自动化毕业设计外文翻译

热门文章

  1. HOJ 1867 经理的烦恼 【 树状数组 】
  2. 转:PHP中实现非阻塞模式
  3. Tomcat的startup.bat启动闪退解决办法
  4. python可视化库matplotlib_Python数据可视化库-Matplotlib(一)
  5. sonarqube没有html插件,spring-boot – 找不到id为’org.sonarqube’的插件
  6. 学java什么书好?推荐几本Java开发的书
  7. PHP第十次实验总结,The Clean Architecture in PHP 读书笔记(十)
  8. python 线性回归 约束_PyTorch线性回归和逻辑回归实战示例
  9. 修改 decimal 默认值为0.00 sql_书写高性能SQL语句技巧,网友都说好
  10. lua 给userdata设置元表_提高Lua语言开发效率的简单方法