stax解析xml时, 使用栈来处理,不错的代码

来源:互联网 发布:玩游戏学编程app 编辑:程序博客网 时间:2024/05/16 19:23

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.util.Queue;import java.util.Stack;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamReader;public class Parse {public static void main(String[] args) throws FileNotFoundException {String s=Parse.class.getResource("/").getFile()+"data.xml"; Stack stack=new Parse().parse(new FileInputStream(s)); while(!stack.isEmpty()){ System.out.println(""+stack.pop());  }}public Stack parse(InputStream in)    {        Stack stack = new Stack();               try        {            //1.得到XMLStreamReader            XMLInputFactory inputFactory = XMLInputFactory.newInstance();                        XMLStreamReader reader = inputFactory.createXMLStreamReader(in);            int i=0;                        while (reader.hasNext())            {                //2.根据事件类型做相应的处理,对于多数应用来说,处理完成可以直接break,跳出循环,提高性能                switch (reader.getEventType())                {                case XMLStreamReader.START_ELEMENT:                    String name = reader.getLocalName();                    if ("order".equals(name))                    {                    System.out.println(++i);                        Order order = new Order();                        stack.push(order);                    } else if ("item".equals(name))                    {                    System.out.println("item");                        Item item = new Item();                        String sku = reader.getAttributeValue(0);                        String quantity = reader.getAttributeValue(1);                        item.setSku(sku);                        item.setQuantity(Integer.parseInt(quantity));                        stack.push(item);                    } else if ("description".equals(name))                    {                    System.out.println("description");                        String desc = reader.getElementText();                        Item item = (Item) stack.pop();                        item.setDescription(desc);                        Order order = (Order) stack.peek();                        order.addItem(item);                    }                    break;                }                reader.next();//获取下一个解析事件            }        } catch (XMLStreamException e)        {                        e.printStackTrace();        }        if (!stack.empty())        {            return stack;        } else        {            return null;        }    }}



<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE po SYSTEM "src/sample.dtd"><po id="po121" submitted="2001-10-05" xmlns="http://www.csdn.net"><billTo id="addr-1"><company>The Redzero Cop.</company><street>Jianguo Road 1ST</street><street>Building 1</street><city>Haidian</city><state>Beijing</state><postalCode>100071</postalCode></billTo><shipTo href="addr-1" /><order><item sku="o318-BP" quantity="5"><description>J2EE programmic</description></item><item sku="o947-TI" quantity="12"><description>Java WEB Service</description></item><item sku="o008-PR" quantity="133"><description>C++ develop</description></item></order><order><item sku="o318-BP22" quantity="5"><description>J2EE programmic</description></item><item sku="o947-TI22" quantity="12"><description>Java WEB Service</description></item><item sku="o008-PR22" quantity="133"><description>C++ develop</description></item></order></po>


原创粉丝点击