Dom4j解析,Sax解析,pull解析
来源:互联网 发布:网站服务器和域名绑定 编辑:程序博客网 时间:2024/04/23 18:39
demo4j解析必须导入专门的jar包:dom4j-1.6.1.jar
下面是解析实例,笔记和标示都在代码里。
package jiexi;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.xml.sax.SAXException;public class TestDom4j {/** * dom4j解析(将整个文件读到内存中,形成一个倒置的树结构, * 然后从中读取我们需要的数据,或修改节点)假如文件较大侧效率低, * 比较适合小型的xml文件解析 * 1,生成解析器SaxReader * 2,通过SaxReader得到Document * 3,通过Document获得根元素 * 4,通过元素迭代所有子元素,和属性 * @throws Exception */public static void main(String[] args) throws Exception {createDocument();readDocument();}/** * 解析xml文件 */private static void readDocument() {//解析器 SAXReader mSaxReader=new SAXReader(); File file=new File("src/children.xml"); Document doc=null; try {doc=mSaxReader.read(file);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} //获得根元素 Element root=doc.getRootElement(); System.out.println("rootName:"+root.getName()); Iterator<Element> iterator=root.elementIterator(); //迭代所有子元素 while(iterator.hasNext()){ Element e=iterator.next(); System.out.println(e.getName()+":"+e.getText()); //迭代所有子元素的属性 for(int i=0;i<e.attributeCount();i++){ String name=e.attribute(i).getName(); System.out.println(name+":"+e.attributeValue(name)); } }}/** * 使用Java代码生成xml文件 * @param url * @throws SAXException * @throws FileNotFoundException */private static void createDocument(){File file=new File("src/student.xml");if(!file.exists()){try {file.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//创建文档并设置根节点Document doc=DocumentHelper.createDocument();Element root=DocumentHelper.createElement("student");doc.setRootElement(root);//第二种方法,先创建根节点,在根据根节点创建文档//Element root2=DocumentHelper.createElement("student");//Document doc2=DocumentHelper.createDocument(root2);//为根节点添加子属性和节点root.addAttribute("name", "zhangsan");Element age=root.addElement("age");age.setText("16");Element grade=root.addElement("grade");grade.setText("99");//书写到xml文件OutputFormat format=new OutputFormat(" ", true);//缩进四个空格,换行为trueFileOutputStream fos=null;try {fos = new FileOutputStream(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}XMLWriter writer=null;try {writer = new XMLWriter(fos,format);} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {writer.write(doc);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("编写成功!");//打印在控制台XMLWriter writer2=null;try {writer2 = new XMLWriter(format);} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {writer2.write(doc);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
Sax解析实例:
带解析的文件:
<?xml version="1.0" encoding="utf-8"?><student name="zhangsan"> <age>16</age> <grade>99</grade></student>解析代码:
package jiexi;import java.io.File;import java.io.FileInputStream;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 TestSax {/** * 基于事件流的解析方法 * 不需要把整个文件读取到内存中,占用内存小 * 可以随时停止 * 不能写入xml * * 使用sax解析的步骤 * 1,继承DefaultHandler并实现其方法 * 2,创建Sax解析器工厂 * 3,获得解析器 * 4,获得输入流 * 5,调用解析器解析方法 * @param args * @throws SAXException * @throws Exception */public static void main(String[] args) throws Exception, SAXException {//生成解析器工厂SAXParserFactory sf=SAXParserFactory.newInstance();//生成解析器对象SAXParser sp=sf.newSAXParser();//获得输入流File file=new File("src/student.xml");FileInputStream fis=new FileInputStream(file);ParseReader pReader=new ParseReader();//开始解析sp.parse(fis, pReader);//打印结果System.out.println(pReader.getStudent().toString());}}/** * 继承DefaultHandler对象,实现抽象方法 * @author user * */class ParseReader extends DefaultHandler{private Student student=null;private String tagName=null;public Student getStudent(){return student;}@Overridepublic void startDocument() throws SAXException {super.startDocument();student=new Student();}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes)throws SAXException {super.startElement(uri, localName, qName, attributes);System.out.println("uri:"+uri+",localName:"+localName+",qName:"+qName); tagName=qName;try {if("student".equals(qName)){student=new Student();student.name=attributes.getValue(0);}} catch (Exception e1) {e1.printStackTrace();}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);if(tagName!=null){if("age".equals(tagName)){student.age=new String(ch,start,length);}else if("grade".equals(tagName)){student.grade=new String(ch,start,length);}}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {super.endElement(uri, localName, qName);tagName=null;}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}}
pull解析,在Java项目中需要引入jar,Android中则已经集成此jar不需要再引入。
解析文件:
<?xml version="1.0" encoding="utf-8"?><student name="zhangsan"> <age>16</age> <grade>99</grade></student>
解析代码:
package com.example.getmynumber.util;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.lang.reflect.Field;import java.net.URISyntaxException;import java.net.URL;import org.xmlpull.v1.XmlPullParser;import android.content.Context;import android.util.Log;import android.util.Xml;import com.example.getmynumber.entity.Student;public class UtilHttp {/** * pull解析也是基于事件流的解析方法 * 步骤: * 1,获得解析器对象 * 2,生成流对象 * 3,为解析器绑定流对象 * 4,开始解析(根据EventType和nextText遍历所有的数据) */public static void pullXml(Context context){XmlPullParser parser=Xml.newPullParser();Class mClass=Student.class;Student student=new Student();Reader is=null;try {is=new InputStreamReader(context.getAssets().open("student.xml"));parser.setInput(is);int eventType=parser.getEventType();while(eventType!=XmlPullParser.END_DOCUMENT){switch(eventType){case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:Log.i("wangsongbin", ""+parser.getName());if("student".equals(parser.getName())){student=new Student();student.name=parser.getAttributeValue(0);parser.next();}else{Field field=mClass.getDeclaredField(parser.getName());if(field!=null){field.setAccessible(true);field.set(student, parser.nextText());}}break;case XmlPullParser.END_TAG:break;}eventType=parser.next();}Log.i("wangsongbin", ""+student.toString());} catch (Exception e) {e.printStackTrace();}finally{Log.i("wangsongbin", ""+student.toString());try {is.close();} catch (Exception e) {e.printStackTrace();}}}}
0 0
- Dom4j解析,Sax解析,pull解析
- 解析XML(SAX、DOM、PULL、dom4j)
- SAX解析和PULL解析
- Sax,Pull,Dom解析
- SAX PULL解析实例
- PULL-SAX解析
- SAX PULL 解析xml
- DOM、SAX、PULL解析
- sax解析、dom4j解析、xpath
- sax解析和dom4j解析
- dom4j-dom-sax解析
- pull解析DOM解析SAX解析
- sax、dom、pull解析xml
- SAX、DOM、PULL解析XML
- Dom Sax Pull解析xml
- sax、dom、pull解析xml
- sax、dom、pull解析xml
- sax dom pull 解析xml
- phpcms普通路径模式查找方法文件,和html文件
- C++中的异常
- 封装与继承
- 成功烧写tiny6410开发板
- HBase存储架构
- Dom4j解析,Sax解析,pull解析
- 设计模式(十九)状态模式(State)-行为型
- fzu 2059 并查集+离线处理
- jquery中的attr()方法
- 【笔试面试题】腾讯2013实习生面试算法题及参考答案
- PHP学习之路(一)——在zendstudio里用zendframework
- 五大常用算法之四:回溯法
- 第一个Spark程序
- 安卓的一些图片操作小计