XML文件解析-DOM4J方式和SAX方式
最近遇到的工作内容都是和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方式相关推荐
- XML文件解析之--DOM与SAX
xml文件又称'可扩展性标记语言',可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml ...
- dom4j工具类_基于DOM4J的XML文件解析类
XML文件解析分四类方式:DOM解析:SAX解析:JDOM解析:DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于ja ...
- Dom4j解析Xml文件,Dom4j创建Xml文件
Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...
- XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML
XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...
- java怎么xml文件解析_Java对Xml文件解析
JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...
- 【VOC格式xml文件解析】——Python
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/26 12:49 # @Author : @linlianqin # @S ...
- XML - XML学习/XML文件解析器(C++)实现
XML - XML学习/XML文件解析器(C++)实现 XML概述 XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...
- Java - XML文件解析
Java对XML文件的解析 一.前言 二.实例分析 - DOM方式解析XML文件 2.1 XMLDomParseUtil - 抽象工具类 2.2 待解析xml文件示例 2.3 解析xml文件 2.3. ...
- Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)
Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...
最新文章
- set.difference() 的用法(python3)_Python 集合 difference_update() 使用方法及示例
- Lua1.0 代码分析 库
- 网络安全等保定级_网络安全防护专项检查迫在眉睫, 青莲帮您快速定级备案和评测...
- linux父设备,linux 设备模型---学习记录(二)
- HTML比较常用的标签
- 干货-iOS、mac开源项目及库,以后我也会持续更新。
- html代码里面换图片不显示不出来了,微擎 Ueditor 百度编辑器 替换图片不显示问题...
- mysql column legnth too big for_Column length too big for column 'Flist' (max = 21845);
- matlab单元数组和结构,Matlab中单元数组和结构数组
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛.J强迫症的序列
- 《中国新能源汽车舆情报告2021》发布 |特斯拉“车顶维权”占据年度十大舆情事件之首...
- 《房地产证》与《房屋所有权证》或《房产证》有什么区别
- 【水晶报表内功心法】--公式、函数与运行时总计 注:(文章来自阿泰博客)
- pat basic 1082 射击比赛
- java 登录失效时间_详谈Java设置session超时(失效)的时间
- c++-派生类型与常量
- 自己搭深度学习环境踩坑血泪史
- 好吧,cnblogs给我的下马威
- Mac 命令行中操作剪切板
- 机械制造及自动化毕业设计外文翻译
热门文章
- HOJ 1867 经理的烦恼 【 树状数组 】
- 转:PHP中实现非阻塞模式
- Tomcat的startup.bat启动闪退解决办法
- python可视化库matplotlib_Python数据可视化库-Matplotlib(一)
- sonarqube没有html插件,spring-boot – 找不到id为’org.sonarqube’的插件
- 学java什么书好?推荐几本Java开发的书
- PHP第十次实验总结,The Clean Architecture in PHP 读书笔记(十)
- python 线性回归 约束_PyTorch线性回归和逻辑回归实战示例
- 修改 decimal 默认值为0.00 sql_书写高性能SQL语句技巧,网友都说好
- lua 给userdata设置元表_提高Lua语言开发效率的简单方法