XML解析(SAX解析和DOM解析)
来源:互联网 发布:产品报价系统源码 编辑:程序博客网 时间:2024/04/29 07:17
XML解析的两种方式
本文整理了XML解析的两种方式,分别是SAX解析和DOM解析
一、SAX解析
SAX解析是按照XML的标签顺序一步步的解析,首先加载document,然后按照顺序加载Element,在加载时我们可以设置监听事件,当加载document或者element时执行某些操作,直接上代码。
这里采用eclipse开发,XML文件放在project根目录下。
book.xml<?xml version="1.0" encoding="UTF-8"?><书架> <书> <书名>Java编程思想</书名> <作者>张孝祥</作者> <售价>98.8</售价> </书> <书> <书名>HTML5+CSS</书名> <作者>张孝祥</作者> <售价>108.8</售价> </书></书架>
SaxDemo.javapublic class SaxDome { public static void main(String[] args) throws Exception { //加载解析工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); //通过工厂获取SAX解析器 SAXParser sax = factory.newSAXParser(); //获取读取器 XMLReader reader = sax.getXMLReader(); //注册事件处理器 reader.setContentHandler(new MyContentHandler()); //解析XML reader.parse("country.xml"); }}
class MyContentHandler extends DefaultHandler { @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("文档开始"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub System.out.println(qName + "标签开始"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub System.out.println(new String(ch,start,length)); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub System.out.println(qName + "标签结束"); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("文档结束"); }}
1、优点:不需要等待整个XML加载到内存,当解析到某一部分时自动触发对应的方法去处理,效率比较高。理论上不论多大的XML文件都可以解读。
2、缺点:每次将诶西都只能处理一次,下次解析还要重新解析。
二、DOM解析
Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件。
只接上代码,需要的朋友可以直接拷贝
查询:@Test public void query() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("country.xml"); Element root = dom.getRootElement(); List<Element> list = root.elements(); Element book2 = list.get(1); String book2Name = book2.element("书名").getText(); System.out.println(book2Name); }
增加:@Test public void add() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("country.xml"); Element root = dom.getRootElement(); Element book = root.element("书"); Element price = DocumentHelper.createElement("特价"); price.setText("48"); book.add(price); XMLWriter writer = new XMLWriter(new FileOutputStream("country.xml"), OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); }
修改:@Test public void update() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("country.xml"); Element root = dom.getRootElement(); Element price = root.element("书").element("特价"); price.setText("4.0元"); XMLWriter writer = new XMLWriter(new FileOutputStream("country.xml"), OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); }
删除:@Test public void remove() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("country.xml"); Element root = dom.getRootElement(); Element price = root.element("书").element("特价"); price.getParent().remove(price); XMLWriter writer = new XMLWriter(new FileOutputStream("country.xml"), OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); }
1 0
- XML 解析---dom解析和sax解析
- XML解析(SAX解析和DOM解析)
- 解析xml:DOM 和 SAX
- DOM 解析和SAX解析 XML 文档
- XML的SAX解析和DOM解析
- dom,sax解析xml
- XML-DOM SAX解析
- xml解析,dom/sax
- JavaWeb-05 XML基础(Dom解析和Sax解析)
- 16 JSON解析、XML解析(DOM解析,SAX解析)
- Android解析XML(DOM解析,SAX解析,PULL解析)
- XML解析之DOM解析和SAX解析
- xml解析DOM解析和SAX解析对比
- dom解析和sax解析
- DOM和SAX解析
- XML-解析技术(dom解析,sax解析)
- SAX和DOM解析XML区别
- 浅述DOM和SAX解析XML
- RxJava学习笔记
- throw和throws是的区别
- ELK实战-Logstash multiline:识别错误堆栈
- 习题7-2 UVA - 225 Golygons (简单的暴力回溯法+剪枝)
- 关于android studio中装插件genymotion时遇到的一些问题
- XML解析(SAX解析和DOM解析)
- linux用shell发邮件
- HDU1542 Atlantis(线段树+扫描线)
- 关于mysql数据库存储数据乱码问题
- CentOS7 下面通过keepalived 配置nginx 主从方式的双机热备
- 毕设笔记--SSH 之Spring管理
- Kafka环境搭建
- HTML DOM 方法
- ubuntu下安装Eclipse