XML的解析方式有五种,分别为:
DOM(Document Object Model),
DTD(Document Type Definition),
SAX(Simple API for XML),
XSD(Xml Schema Definition),
XSLT(Extensible Stylesheet Language Transformations)
其中最常用的解析方法为DOM和SAX,DOM是基于XML文档树结构的解析,SAX是基于事件流的解析。
DOM方式解析:
SAX方式解析:
SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准。SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强。使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器。SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler,EntityResolver和ErrorHandler。下面的例子可能有点冗长,实际上只要继承DefaultHandler类 ,再覆盖一部分 处理事件的方法 同样可以达到这个示例的效果,但为了纵观全局,还是看看SAX API里面所有主要的事件解析方法吧。( 实际上DefaultHandler就是实现了上面的四个事件处理器接口,然后提供了每个抽象方法的默认实现。)
如果定制,则还需要重写这几个方法。
1、开始解析
public void startDocument()
2、结束解析
public void endDocument()
3、遇到元素1
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
4、遇到元素2
public void endElement(String namespaceURI, String localName, String qName)
5、元素1于元素2之间
public void characters(char ch[], int start, int length)
实例:
1、首先,创建xml文件。
2、解析前,先创建与XML属性对应的Bean实体类,该类中的属性和XML属性一一对应,也可以再对属性创建get和set方法。
public class Student { private int id; private int group; private String name; private String sex; private int age; private String email; private String memo; private String birthday; .... //省略set、get方法 }
3、开始解析
public class SaxParseXml extends DefaultHandler{ //存放遍历集合 private List<Student> list; //构建Student对象 private Student student; //定义一个标记变量,标记当前xml被解析到哪个标签。 private String tagName; ....//get、set方法 //只调用一次 初始化list集合 @Override public void startDocument() throws SAXException { list=new ArrayList<Student>(); } //调用多次 开始解析 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(qName.equals("student")){ student=new Student(); //获取student节点上的id属性值 student.setId(Integer.parseInt(attributes.getValue(0))); //获取student节点上的group属性值 student.setGroup(Integer.parseInt(attributes.getValue(1))); } this.tagName=qName; } //调用多次 @Override public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equals("student")){ this.list.add(this.student); } this.tagName=null; } //只调用一次 @Override public void endDocument() throws SAXException { } //调用多次 @Override public void characters(char[] ch, int start, int length) throws SAXException { if(this.tagName!=null){ String date=new String(ch,start,length); if(this.tagName.equals("name")){ this.student.setName(date); } else if(this.tagName.equals("sex")){ this.student.setSex(date); } else if(this.tagName.equals("age")){ this.student.setAge(Integer.parseInt(date)); } else if(this.tagName.equals("email")){ this.student.setEmail(date); } else if(this.tagName.equals("birthday")){ this.student.setBirthday(date); } else if(this.tagName.equals("memo")){ this.student.setMemo(date); } } } public static void main(String[] args) { SAXParser parser = null; try { //构建SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); //实例化 DefaultHandler对象 SaxParseXml parseXml=new SaxParseXml(); //加载资源文件 转化为一个输入流 InputStream stream=SaxParseXml.class.getClassLoader().getResourceAsStream("Student.xml"); //调用parse()方法 parser.parse(stream, parseXml); //遍历结果 List<Student> list=parseXml.getList(); for(Student student:list){ System.out.println("id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName()+"\tsex:"+student.getSex()+"\tage:"+student.getAge()+"\temail:"+student.getEmail()+"\tbirthday:"+student.getBirthday()+"\tmemo:"+student.getMemo()); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
4、打印出结果:
相关推荐
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
使用java解析XML文件,解析完之后将解析结果导入mysql数据库中
Java解析XML文件
JAVA解析XML文件四种方式比较,欢迎下载使用!
Java 解析xml文档(SAX,DOM,DOM4J)工程源代码。
java解析xml文件
java解析xml文档的常用方法
常用的java解析xml文档实例(常用的java解析xml文档实例){常用的java解析xml文档实例}
java解析xml文件,已连接数据库为例,我用的是oracle数据库 三种方式的例子都有 dom sax dom4j 很全的哦。。。 本人亲自写的哦
Java解析xml所需jar包
java解析XML的4种经典方法 java解析XML的4种经典方法 java解析XML的4种经典方法
java解析xml文档模型的性能测试程序,里面包括程序源代码,测试分析文档,当然自然也包括了各种文档模型的使用方法。有dom4j,jdom,xerces,xpp,exml,crimson等,大家可以下载学习,并进一步测试。
Java解析XML文档—使用DOM解析
Java解析XML文件的DOM和SAX方式.doc
JAVA DOM方式解析XML文件 我是用Jubilder2005写的 希望对大家有帮助...
好资料大家用。java解析xml文件的几种方式
压缩包内包含jaxen-1.1.1.jar和dom4j-1.6.1.jar两个jar包文件。这两个文件用于Java解析XML文件。涵盖了Java解析XML文件的主要类