java用DefaultHandler解析XML格式数据

来源:互联网 发布:最准的掐指算法桃花 编辑:程序博客网 时间:2024/06/02 08:34

XML格式数据,即可扩展标记语言(标准通用标记语言的子集)是一种简单的数据存储语言。

//DefaultHandler解析XML格式数据class ParserXml extends DefaultHandler{    /*     * 使用stack数据结构,它是后进先出的特点     */    private Stack<String> stack = new Stack<String>();    //返回的保存着配置文件路径的字符串数组    ArrayList<String> list=new ArrayList<String>();    //定义变量用来保存数据    private String path1;    private String path2;    private String addr;    private String port;    private String URL;    //开始解析    public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {        //qName:表示元素的名字,标签的名字。        stack.push(qName); //将元素名字压到栈顶    }    //解析    public void characters(char[] ch, int start, int length)            throws SAXException {        //peek()把栈中的值拿出来,当不弹出来,只取出值而已        //pop()把栈中的值弹出来        String tag = stack.peek();         //在输出元素内容之前,我们必须知道当前元素是哪一个元素,所以我们要进行判断        if("path1".equals(tag)){            //提取元素内容            path1 = new String(ch, start, length);        }        else if("path2".equals(tag)){            path2 = new String(ch, start, length);        }else if("addr".equals(tag))        {            addr=new String(ch, start, length);        }        else if("port".equals(tag)){            port=new String(ch, start, length);        }else if("URL".equals(tag))        {            URL=new String(ch, start, length);        }    }    //结束解析    public void endElement(String uri, String localName, String qName)            throws SAXException {        //遇到元素结尾,表示该元素已经解析完毕,需要从栈中弹出        stack.pop();        //monitorpath下的元素        if("monitorpath".equals(qName))        {            list.add(path1);            list.add(path2);        }        //ftp下的元素        else if("ftp".equals(qName))        {            list.add(addr);            list.add(port);        }        //DataBase下的元素        else if("DataBase".equals(qName))        {            list.add(URL);        }    }    public ArrayList<String> Xmlreturn(String path,ParserXml xh)    {        //创建解析工厂        SAXParserFactory factory = SAXParserFactory.newInstance();        //得到SAX的解析器        try {            SAXParser parser = factory.newSAXParser();            parser.parse(new File(path), xh);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        //返回数据集合        return list;    }public static void main(String[] args){    ParserXml parserXml=new ParserXml();    //传入xml数据的路径和解析工厂       ArrayList<String> arrayList=parserXml.Xmlreturn("path.xml",parserXml);    for(String s:arrayList)    {        System.out.println(s);    }}}

上面是解析xml的代码,将如下xml格式数据和工程放在一起即可。路径也可以自己定义输入。

<?xml version="1.0" encoding="UTF-8"?><user>    <!--目录监控的信息-->    <monitorpath>        <path1>E:\\Listentest</path1>        <path2>null</path2>    </monitorpath>    <!--FTP服务器的链接信息-->    <ftp>        <addr>127.0.0.1</addr>        <port>21</port>    </ftp>    <DataBase>        <URL>jdbc:mysql://127.0.0.1:3306/dataaudit</URL>    </DataBase></user>
原创粉丝点击