利用JAXP和DOM4J解析XML
来源:互联网 发布:淘宝助理csv制作 编辑:程序博客网 时间:2024/05/16 19:44
前言
原创文章欢迎转载,请保留出处。若有任何疑问建议,欢迎回复。邮箱:Maxwell_nc@163.com
解析XML主要有两种思想,一种是SAX(Simple API for XML),另一种是DOM(文档对象模型),其中在J2EE中,提供了JAXP来实现这两种解析,本文主要利用JAXP实现SAX解析,同时介绍时下流行的DOM4J实现DOM解析。
SAX解析和DOM解析比较
- SAX解析
- 优点:效率高,当遇到大的XML文件时,不需要扫描完文件就可以操作。
- 缺点:不能进行RUD操作,每次操作都要重新解析
- DOM解析
- 优点:只需要解析一次XML
- 缺点:解析完成才能操作,遇到大的XML文件时耗内存。
JAXP实现SAX解析
首先要有一个xml文件
<?xml version="1.0" encoding="UTF-8"?><测试><作者>maxwell_nc</作者><博客>http://blog.csdn.net/maxwell_nc</博客></测试>
引用一张经典图来说明SAX解析
接下来写代码:
package maxwell;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class SaxPaserDemo { public static void main(String[] args) throws Exception { //获取SAX解析器工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); //通过工厂获取SAX解析器 SAXParser parser = factory.newSAXParser(); //获取XML阅读器 XMLReader reader = parser.getXMLReader(); //关联事件解析器 reader.setContentHandler(new MyContentHandler()); //解析XML文件 reader.parse("src/maxwell/demo.xml"); }}/*DefaultHandler是ContentHandler接口适配器*/class MyContentHandler extends DefaultHandler{ @Override public void startDocument() throws SAXException { // 扫描到xml文档开始 System.out.println("xml解析开始"); } @Override public void endDocument() throws SAXException { // 扫描到xml文档结束 System.out.println("xml解析结束"); } @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // 发现开始标签,打印标签名 System.out.println("<"+name+">"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // 打印标签体 System.out.println(new String(ch, start, length)); }}
利用DOM4J实现DOM解析
SAX解析最大缺点就是不能RUD,而DOM可以,无奈本身JAXP的性能低下,所以现在流行使用DOM4J解析XML。
利用DOM4J来解析XML,代码实现上更加简单简洁。
package maxwell;import java.io.FileOutputStream;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class Dom4jDemo { public static void main(String[] args) throws Exception { //利用dom4j获取XML阅读器 SAXReader reader = new SAXReader(); //获取document对象 Document document = reader.read("src/maxwell/demo.xml"); //获取根节点对象 Element root = document.getRootElement(); //打印标签体 System.out.println(root.element("作者").getText()); System.out.println(root.element("博客").getText()); //添加节点并添加属性,设置标签体 Element newEle = DocumentHelper.createElement("添加节点"); newEle.addAttribute("测试", "test"); newEle.setText("测试dom4j的添加节点功能"); root.add(newEle); //写回文件 XMLWriter writer = new XMLWriter(new FileOutputStream("src/maxwell/demo.xml"),OutputFormat.createPrettyPrint()); writer.write(document); writer.close(); }}
而且带有美化输出的功能,修改后:
总结
实际上无论JAXP还是DOM4J都支持DOM和SAX解析,但DOM4J操作都非常简单,而且性能要比JAXP强大,但要注意,要使用DOM4J必须导入jar文件。
1 0
- 利用JAXP和DOM4J解析XML
- jaxp利用DOM解析XML
- jaxp利用Sax解析XML
- 利用dom4j创建XML和解析XML
- 利用dom4j创建XML和解析XML
- 简单xml的使用以及xml的解析dom4j和jaxp
- XML、Jaxp SAX解析、dom4j解析XML、XPath运用
- 利用dom4j解析XML
- 利用dom4j解析xml
- 利用dom4j解析xml
- 利用JAXP方式对XML解析
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- JavaWeb系列之四(XML的解析技术(dom,sax)和解析器(jaxp,dom4j))
- 利用dom4j解析xml文件
- 利用Dom4j解析xml文档
- 利用dom4j解析xml--天气预报
- 利用Dom4j 解析XML文件
- java xml 框架 dom4j 解析 xml 字符串 和 利用 dom4j 创建 XML 的方法
- JS 日期格式化扩展Date
- 最全的CSS浏览器兼容问题
- Win7 每天定时关机
- 微信开发之获取素材列表并保存
- 【最短路】 Codeforces Round #302 (Div. 1) B - Destroying Roads
- 利用JAXP和DOM4J解析XML
- 【C++】用结构体完成:编程求出3个学生中某个学生的平均成绩
- VirtualBox 虚拟机配置Ubuntu 网络
- 第八周项目二 Time类中的运算符重载
- VMWare Workstation 10 管理基础
- 天声人語 20150509
- static 关键字 乱用的后果
- Foundation 框架的常用类
- 黑马程序员--java基础:反射机制