java dom、sax解析xml
来源:互联网 发布:voa听力软件下载 编辑:程序博客网 时间:2024/04/30 07:42
XML报文:
<?xml version="1.0" encoding="utf-8" ?><ROWDATA><ROW> <T_ID>1</T_ID> <T_KEY>binding_time</T_KEY> <T_VALUE></T_VALUE> <T_REMARK>保存im.cgs_bind_info的binding_time字段</T_REMARK></ROW><ROW> <T_ID>2</T_ID> <T_KEY>relate_time</T_KEY> <T_VALUE>2015-06-09 23:55:26</T_VALUE> <T_REMARK>保存im.cgs_relate_info的relate_time字段</T_REMARK></ROW><ROW> <T_ID>3</T_ID> <T_KEY>bind_oper_time</T_KEY> <T_VALUE></T_VALUE> <T_REMARK>保存im.cgs_user_bind_oper的oper_time字段</T_REMARK></ROW></ROWDATA>
sax解析XML:
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SaxParser extends DefaultHandler {private List<Map<String, Object>> list;/** * 解析XML文档 * @param filePath 要解析的文件路径 * @throws IOException * @throws ParserConfigurationException * @throws SAXException */public SaxParser(String filePath) throws IOException, ParserConfigurationException, SAXException {SAXParser parser = null;try {// 构建SAXParserparser = SAXParserFactory.newInstance().newSAXParser();File file = new File(filePath);FileInputStream fis = new FileInputStream(file);SaxHandler saxHandler = new SaxHandler();// 调用parse()方法parser.parse(fis, saxHandler);list = saxHandler.getRowList();fis.close();} catch (ParserConfigurationException e) {throw e;} catch (SAXException e) {throw e;} catch (IOException e) {throw e;} finally {if (parser != null)parser.reset();}}/** * 解析XML文档 * @param is 要解析的文件输入流 * @throws IOException * @throws ParserConfigurationException * @throws SAXException */public SaxParser(InputStream is) throws IOException, ParserConfigurationException, SAXException {SAXParser parser = null;try {// 构建SAXParserparser = SAXParserFactory.newInstance().newSAXParser();SaxHandler saxHandler = new SaxHandler();// 调用parse()方法parser.parse(is, saxHandler);list = saxHandler.getRowList();is.close();} catch (ParserConfigurationException e) {throw e;} catch (SAXException e) {throw e;} catch (IOException e) {throw e;} finally {if (parser != null)parser.reset();}}/** * 获取解析后得到的List */public List<Map<String, Object>> getRowList() {return list;}}class SaxHandler extends DefaultHandler{List<Map<String, Object>> list;Map<String, Object> map;private String qName; // 节点名称private StringBuilder sb = new StringBuilder();// 保存节点内容/** * 获取解析后得到的List */public List<Map<String, Object>> getRowList() {return list;}@Overridepublic void startDocument() throws SAXException {//System.out.println("开始解析XML");list = new ArrayList<Map<String,Object>>();}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//System.out.println("读取标签:" + uri + " ---> " + localName + " ---> " + qName);/* * 如果使用localName的话,有些环境下永远为空,qName就不会用这种情况 */this.qName = qName;if ("ROW".equals(this.qName)) {map = new LinkedHashMap<String, Object>();}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {/*如果xml文档交长(一般4k会清理一下内存),有可能一个元素的值会被分成两次(多次)读入。如果只用characters方法去获得元素的值,很可能得到的不完整的数据。characters会在startElement和endElement之间调用多次,不能保证一次会返回整个文本块,所以必须等待endElement的时候才可以认为这个文本结点结束。*/if (this.qName != null && !"ROWDATA".equals(this.qName) && !"ROW".equals(this.qName)) {String data = new String(ch, start, length);sb.append(data);}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if (this.qName != null && !"ROWDATA".equals(this.qName) && !"ROW".equals(this.qName)) {// 等到解析完当前qName标签,再将qName和值放到map中map.put(this.qName, sb.toString());sb.setLength(0);}if ("ROW".equals(qName)) {list.add(map);}// 当前qName解析结束时置为空。this.qName = null;}@Overridepublic void endDocument() throws SAXException {//System.out.println("结束解析XML");}}
dom4j解析XML:
import java.io.File;import java.io.InputStream;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dom4jParser {private List<Map<String, Object>> list;/** * 解析XML文档 * @param filePath 要解析的文件路径 * @throws DocumentException */public Dom4jParser(String filePath) throws DocumentException {list = new ArrayList<Map<String,Object>>();SAXReader reader = new SAXReader();File file = new File(filePath);Document document = reader.read(file);list = parserXML(document);}/** * 解析XML文档 * @param is 要解析的文件输入流 * @throws DocumentException */public Dom4jParser(InputStream is) throws DocumentException {list = new ArrayList<Map<String,Object>>();SAXReader reader = new SAXReader();Document document = reader.read(is);list = parserXML(document);}public List<Map<String, Object>> getRowList() {return list;}/** * 解析根节点,获取得到所有ROW节点的子节点的集合 */private List<Map<String, Object>> parserXML(Document document) throws DocumentException {Element rowdata = document.getRootElement(); // ROWDATA跟节点List<Element> rows = rowdata.elements("ROW");List<Map<String, Object>> list = parserRowElement(rows);return list;}/** * 解析ROW节点下的子节点 */private List<Map<String, Object>> parserRowElement(List<Element> rows) {for (Element element : rows) {Map<String, Object> map = new LinkedHashMap<String, Object>();Iterator<Element> it = element.elementIterator();while (it.hasNext()) {Element next = it.next();map.put(next.getName(), next.getTextTrim());}list.add(map);}return list;}}
0 0
- java dom、sax解析XML
- java dom、sax解析xml
- Java 解析xml的方法:DOM,SAX
- Java 解析 xml 之 DOM and SAX
- Java xml解析(DOM、SAX)
- Java 解析XML文档(DOM & SAX)
- JAVA解析xml DOM SAX JDOM DOM4J
- dom,sax解析xml
- XML-DOM SAX解析
- xml解析,dom/sax
- Java用SAX和DOM解析器解析Xml
- sax、dom、pull解析xml
- SAX、DOM、PULL解析XML
- Dom Sax Pull解析xml
- DOM、SAX解析xml文档
- XML解析:DOM、SAX、XMLParser
- sax、dom、pull解析xml
- XML解析(DOM,SAX,dom4j)
- jmx配置远程监控
- Leetcode[4]-Median of Two Sorted Arrays
- R.java文件中的资源在Activity中得不到引用的问题
- cdlinux 安装到虚拟机中,百度经验上是错误的。
- 如何解决智能硬件互联不智慧难题?
- java dom、sax解析xml
- LVS三种模式配置及优点缺点比较
- 【leetcode】【217】Contains Duplicate
- Android 手势识别开发—手势自动拨号
- 博弈初识
- 黑马程序员-I/O流的学习
- Hadoop第一讲
- leetcode 27 -- Remove Element
- button的几个不太关注属性showsTouchWhenHighlighted