`

使用sax解析xml文件的一个小例子

阅读更多

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.Reader;

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.List;

import java.util.Stack;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

 

import org.apache.commons.beanutils.BeanUtils;

import org.xml.sax.Attributes;

import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

 

public class ParserTest extends DefaultHandler {

 

        StringBuffer tdBuffer= new StringBuffer();

        boolean tr_in_stack = false;

        static String tag_tr = "tr";

        static String tag_td = "td";

       

        TrData trData;

 

        Stack<TrData> trDatas = new Stack<TrData>();

 

        Stack<Object> objects = new Stack<Object>();

 

        Stack<String> tagNames = new Stack<String>();

 

        public void startDocument() throws SAXException {

                System.out.println("-----    document begin     -----");

        }

 

        public void endDocument() throws SAXException {

                System.out.println("-----    document end       -----");

        }

 

        public void characters(char ch[], int start, int length)

                        throws SAXException {

                // this.objects.isEmpty() ||

                if (this.tagNames.isEmpty())

                        return;

 

                if (this.tagNames.peek().equals(tag_td)) {

                        String value = new String(ch, start, length);

 

                        if (value == null)

                                return;

 

                        value = value.trim();

 

                        if ("".equals(value))

                                return;

 

                        tdBuffer.append(value);

                }

        }

 

        /* add the name of the attribute belonged any object */

        public void startElement(String uri, String localName, String qName,

                        Attributes atts) throws SAXException {

                qName = qName.toLowerCase();

 

                if (!qName.equals(tag_tr) && !qName.equals(tag_td))

                        return;

 

                if (qName.equals(tag_tr)){

                        if(tr_in_stack)

                                this.tagNames.clear();

                        else

                                this.trData = new TrData();

                       

                        tr_in_stack = true;

                }

 

                this.tagNames.add(qName);

        }

 

        /* remove the name of the attribute belonged any object */

        public void endElement(String uri, String localName, String qName)

                        throws SAXException {

 

                if (tagNames.isEmpty()&&!qName.equals("html"))

                        return;

 

                qName = qName.toLowerCase();

 

                if (qName.equals(tag_td)){

                        this.tagNames.pop();

                       

                        String value = this.tdBuffer.toString();

                       

                        if(!"".equals(value)||value!=null)

                                this.trData.addTd(value);

                       

                        this.tdBuffer = new StringBuffer();

                }

 

                if (qName.equals(tag_tr)) {

                        this.tagNames.clear();

                        tr_in_stack = false;

                       

                        this.trDatas.add(this.trData);

                }

               

                if(qName.equals("html")){

                        int ii=0;

                        List<String> strs = new ArrayList<String>();

                        String s=null;

                        while(ii<=trDatas.lastIndexOf(trDatas.lastElement())){

                                if(!trDatas.elementAt(ii).getTds().get(0).isEmpty()){

                                        s=trDatas.elementAt(ii).getTds().toString();

                                        s=s.substring(1, s.length()-1);

                                        Pattern p = Pattern.compile(" ");

                                        Matcher m = p.matcher(s);

                                        s=m.replaceAll("");

                                        strs.add(s);

                                }

                                ii++;                  

                        }

                        for(String str:strs){

                                System.out.println(strs.indexOf(str)+"  "+str);

                                System.out.println();

                        }

                     

                }

 

        }

       

              

        

        protected void setAttributes(Object target, Attributes atts)

                        throws IllegalAccessException, InvocationTargetException {

                /* set the attribute */

                for (int i = 0; i < atts.getLength(); i++) {

                        BeanUtils.setProperty(target, atts.getQName(i), atts.getValue(i));

                }

        }

 

        private boolean isValid(String value) {

                if (value.startsWith("<img") || value.startsWith("<table"))

                        return false;

 

                return true;

        }

 

        public static class TrData {

                private List<String> tds = new ArrayList<String>();

 

                public void addTd(String tdMsg) {

                        tds.add(tdMsg);

                }

 

                public List<String> getTds() {

                        return tds;

                }

        }

 

        public static void main(String args[]) {

 

                SAXParserFactory saxFactory = SAXParserFactory.newInstance();

                InputStream inputStream = null;

                Reader reader = null;

                try {

                        /* inputStream of xml */

                        inputStream = new FileInputStream(

                                        "D:/1.xml");

                        /* specify the CharSet when reading the Stream */

                        reader = new InputStreamReader(inputStream, "UTF-8");

 

                        /*

                          * construct the InputSource with reader, which is the source of

                          * saxParser

                          */

                        InputSource source = new InputSource(reader);

 

                        /* create parser with SaxFactory */

                        SAXParser parser = saxFactory.newSAXParser();

                        /* the most importence component used to parse the xml */

                        ParserTest handler = new ParserTest();

 

                        /* parse the xml source with studentHandler */

                        parser.parse(source, handler);

                       

 

                } catch (Exception e) {

                        e.printStackTrace();

                         

                } finally {

                        /* release the resource */

                        try {

                                if (reader != null)

                                        reader.close();

                                if (inputStream != null)

                                        inputStream.close();

                        } catch (IOException ioe) {

                                ioe.printStackTrace();

                        }

                }

        }

}

分享到:
评论

相关推荐

    SAX解析XML文件实例

    一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    SAX解析超大XML文件 示例代码

    以下是一个简单的SAX解析超大XML文件的Java示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers....

    使用SAX解析XML文件个人总结

    ### 使用SAX解析XML文件详解 ...本总结详细介绍了如何使用SAX解析XML文件的基本流程及关键点,同时提供了一个简单的示例代码,有助于理解整个解析过程。希望本文能对学习和使用SAX解析XML文件有所帮助。

    java解析xml数据---sax解析器

    以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...

    SAX对xml文档进行解析

    下面是一个简单的SAX解析XML文档的Java代码示例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXXmlDemo extends ...

    Sax解析xml及例子

    以下是一个简单的SAX解析XML的例子: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends DefaultHandler {...

    SAX解析XML例子

    以下是一个简单的SAX解析XML的步骤: 1. 创建`SAXParserFactory`实例,并配置解析器: ```java SAXParserFactory factory = SAXParserFactory.newInstance(); ``` 2. 使用工厂创建`SAXParser`对象: ```java ...

    Java使用sax、dom、dom4j解析xml文档

    以下是一个简单的SAX解析示例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends DefaultHandler { @...

    android sax解析xml文件

    以下是一个简单的SAX解析XML文件的Android实例源码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...

    anroid SAX解析xml文件及实例

    以下是一个简单的SAX解析XML的Android代码实例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...

    javaSAX方式解析xml文档

    Java SAX方式解析XML文档是一种高效的处理大型XML文件的方法,它基于事件驱动模型,不将整个XML文档加载到内存中,而是逐个处理XML元素。这种方式非常适合处理大文件,因为它节省了内存,但需要编写更多的代码来处理...

    Sax解析xml中的某个(一部分报文节点)循环组的内容

    本篇文章将详细探讨如何使用SAX解析XML中的特定循环组内容。 首先,了解SAX解析的基本原理。SAX解析器在读取XML文件时,会触发一系列事件,如开始文档、开始元素、字符数据、结束元素等。开发者通过实现SAX解析器的...

    Java解析XML文档(二):sax读取xml文件导出excel

    这个例子展示了如何使用SAX解析XML,并利用Apache POI将数据写入Excel。实际项目中,你可能需要根据XML文档的具体结构和需求进行适当的调整。同时,为了优化性能,可以在处理XML事件时,避免不必要的数据复制和内存...

    解析XML文件例子

    - SAX解析器:Simple API for XML,事件驱动,逐行读取,占用内存小,适合大文件。 - StAX(Streaming API for XML):流式解析,介于DOM和SAX之间,允许向前移动的迭代,适合处理大文件。 3. 解析XML文件的Java...

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...

    使用Sax技术读XML文档:SaxReaderXML.rar

    要使用SAX解析XML,首先需要创建一个实现了`ContentHandler`接口的类,然后在回调方法中处理XML数据。以下是一个简单的例子: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import ...

    sax方式解析XML文件

    给定的代码示例是一个使用SAX解析XML文件的Java程序。下面我们将分步解析这个过程: 1. **导入必要的包**:首先,我们需要导入SAX解析所需的类库,包括`javax.xml.parsers.*`、`org.xml.sax.*`、`org.xml.sax....

    使用Sax方法读XML文档:SaxReaderXML.zip

    描述中提到的“详细代码展示例子”,意味着这个压缩包可能包含了一个或者多个源代码文件,展示了如何在实际编程中应用SAX解析XML文档的步骤。这些代码通常会包括以下几个关键部分: 1. **事件处理器类**:继承自`...

    DOM解析XML文件例子

    在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...

Global site tag (gtag.js) - Google Analytics