对XML进行Sax解析:

一、对XML进行Sax解析:

Sax解析XML是事件驱动的,安装XML的顺序一步一步进行解析的.优点不用事先调入整个文档,占用资源少,缺点是事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素.

二、实现:

1.创建一个XMl文档:

<?xml version="1.0" encoding="UTF-8"?><oracle >    <user id="1" >       <name>scott</name>       <pwd>scott</pwd>    </user>    <user id="2">       <name>sys</name>       <pwd>sys</pwd>    </user>    <user id="3">       <name>system</name>       <pwd>system</pwd>    </user>    </oracle>

2.开始解析:

package Sax解析Xml;import java.io.File;import java.io.IOException;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 {public static void main(String[] args) {// 1.实例化SaxParserFactory对象SAXParserFactory factory = SAXParserFactory.newInstance();try {// 2.创建解析器:SAXParser saxParser = factory.newSAXParser();// 3.获取需要解析的文档,生成解析器,解析文档File xmlFile = new File("myXml\\cb.xml");MyHandler handler = new MyHandler();// 开始解析:saxParser.parse(xmlFile, handler);} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static class MyHandler extends DefaultHandler {// 作用是来记录解析的上一个节点的名称private String preTag = null;private boolean ifEnd =false;private String getName;private String getPwd;@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stub// super.characters(ch, start, length);if (preTag != null) {if ("name".equals(preTag)) {getName = new String(ch, start, length);} else if ("pwd".equals(preTag)) {    getPwd = new String(ch, start, length);    ifEnd=true;    System.out.println("   <name>"+getName+"</name>");                    System.out.println("   <pwd>"+getPwd+"</pwd>");}}}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stub// super.endDocument();System.out.println(" </oracle>");System.out.println("--------------------------");System.out.println("解析XML完毕");}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stub               if(ifEnd==true){            System.out.println("  </user>");            ifEnd=false;            }//当一个标签解析完后,preTag设置为null;preTag = null;}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubSystem.out.println("开始解析XML文件");System.out.println("------------------------------");System.out.println("<?xml version="+"\""+1.0+"\""+ "encoding="+"\""+"UTF-8"+"\""+"?"+">");System.out.println(" <oracle>");}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stub           // <user id="1" >if ("user".equals(qName)) {String s = qName;String s1 = attributes.getValue(0);// IdString s2 = attributes.getLocalName(0);//System.out.println(s + s1 + s2);System.out.println("  <"+qName+" "+"id="+"\""+s1+"\""+">");}preTag = qName;}}}

三、运行结果:

1383.png

四、补充说明:

1.执行顺序:

由于Sax解析是按照xml文件的顺序来解析,当读入<?xml.....>时,会调用startDocument()方法,当读入<oracle>的时候,由于它是个ElementNode,所以会调用startElement(String uri, String localName, String qName, Attributes attributes),当要得到oracle孩子的信息是,就会调用characters(char[] ch, int start, int length)方法。

2.内部类加static关键字:

内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以在不做其他变动的情况下,最简单的解决办法是将public class改为public static class.

3.startElement(String uri, String localName, String qName,Attributes attributes) 方法的参数解释:

五、总结:

今天总算把对XML的两种解析方法搞了一遍,当初老师让写,自己不写,大概写了个Sax,现在都看不懂,我也是醉了,通过两种方法,我觉得Sax解析比较轻便。

更多相关文章

  1. xml实现多渠道接入网站的构架的方法
  2. 四种获取RSS源xml文件的方法
  3. 类TransformBinder将xml解析为xhtml的实例方法
  4. 把SQL Server中的数据导出为XML和Json的方法解析
  5. android三种操作XML的方法总结
  6. jscript和vbscript对XML元素属性进行操作的方法
  7. 在asp下通过xml打包网站文件的方法
  8. 分享一个利用Ajax传递Xml文档的方法
  9. 分享一个jscript与vbscript操作XML元素属性的方法

随机推荐

  1. android调用系统打电话功能
  2. Android之Fastboot、Recovery基础知识
  3. Android Studio第二十四期 - Gson封装Uti
  4. Android工程 单元测试
  5. Android(安卓)Studio 快捷键(转)
  6. Android(安卓)- 时间 日期相关组件
  7. Android JNI 分析
  8. android之datepicker控件用法
  9. Android Lights笔记
  10. android:layout_width="match_parent"