XML之StAX(二)
来源:互联网 发布:绝世唐门升坐骑数据 编辑:程序博客网 时间:2024/04/25 07:15
XML之StAX(一)
XML之StAX(二)
面向Stream的StAX
XMLStreamReader
StAX中的XMLStreamReader类提供了一个Cursor形式的API,用于解析XML。和Iterator API一样,允许你确定何时访问下一个Event,这里的Event是元素开头,元素的结尾,一组text等。XMLStreamReader的next()方法不返回Events,而是移动Cursor到下一个XML的Event。你可以直接调用方法获取当前Event的更多信息,这和你迭代JDBC ResultSet的记录一样。下面是你可能遇到的XML Stream的Events,它们包含在javax.xml.stream.XMLStreamConstants:
- ATTRIBUTE
- CDATA
- CHARACTERS
- COMMENT
- DTD
- END_DOCUMENT
- END_ELEMENT
- ENTITY_DECLARATION
- ENTITY_REFERENCE
- NAMESPACE
- NOTATION_DECLARATION
- PROCESSING_INSTRUCTION
- SPACE
- START_DOCUMENT
- START_ELEMENT
下面是一个简单的例子:
public static void read()throws IOException{XMLInputFactory factory = XMLInputFactory.newFactory();Reader reader = null;try {// reader = new FileReader("F:\\Codes\\IDEA\\Tools\\data\\xml\\test.xml");InputStream input = CursorAccess.class.getClassLoader().getResourceAsStream("test.xml");XMLStreamReader streamReader = factory.createXMLStreamReader(input);while (streamReader.hasNext()){int type = streamReader.next(); // streamReader.getEventType() == XMLStreamReader.START_ELEMENT == XMLStreamConstans.START_ELEMENT // equals streamReader.isStartElement() and type==XMLStreamConstans.START_ELEMENTif(streamReader.isStartElement()){QName element = streamReader.getName();String name = element.toString();//if(name.equals("book")) {QName attrName = streamReader.getAttributeName(0);String attrValue = streamReader.getAttributeValue(0);System.out.println(element + ": " + attrName + "=" + attrValue);}else if(!name.equals("bookstore") && !name.equals("book")){String value = streamReader.getElementText();System.out.println(element + ": " + value);}}}}catch (Exception e){e.printStackTrace();}finally {if(reader != null) {reader.close();}}}
和XMLEventReader一样,XMLStreamReader也可以自定义Filter:
public static void readFilter()throws IOException{XMLInputFactory factory = XMLInputFactory.newFactory();InputStream input = null;try {input = new FileInputStream(new File("F:\\Codes\\IDEA\\Tools\\data\\xml\\test.xml"));XMLStreamReader streamReader = factory.createFilteredReader(factory.createXMLStreamReader(input), new StreamFilter() {@Overridepublic boolean accept(XMLStreamReader reader) {if(reader.isStartElement()){String name = reader.getName().toString();if(name.equals("title") || name.equals("price")){return true;}}return false;}});while (streamReader.hasNext()){streamReader.next();if(streamReader.isStartElement()){String name = streamReader.getLocalName();System.out.println(name + ": " + streamReader.getElementText());}}}catch (Exception e){e.printStackTrace();}finally {if(input != null){input.close();}}}
XMLStreamWriter
XMLStreamWriter是用于生成XML的,不过不同于XMLEventWriter的是,它不要求为元素定义前缀:
public static void write(){XMLOutputFactory factory = XMLOutputFactory.newFactory();try {XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter("F:\\Codes\\IDEA\\Tools\\data\\xml\\cursor.xml"));writer.writeStartDocument();writer.writeStartElement("test:bookstore");writer.writeStartElement("test:book");writer.writeAttribute("category", "COMPUTER");writer.writeStartElement("author");writer.writeCharacters("Giada De Laurentiis");writer.writeEndElement();writer.writeEndElement();writer.writeEndElement();writer.writeEndDocument();writer.flush();writer.close();}catch (Exception e){e.printStackTrace();}}
完整代码托管在:https://github.com/GatsbyNewton/xml-stax
参考文献:
http://www.w3school.com.cn/xml/index.asp
0 0
- XML之StAX(二)
- XML之StAX(一)
- Java XML解析之 StAX
- XML-----StAX
- Java与XML 之 SAX和StAX
- Java解析xml文档之STAX解析
- 使用stax操作xml(1)
- 使用stax操作xml(2)
- 使用stax操作xml(3)
- 使用stax操作xml(4)
- 使用stax操作xml(5)
- 使用stax操作xml(6)
- WebService(2)-XML系列之用Stax操作Xml
- WS-Security 中文问题&Stax(Streaming API for XML) (二)
- Stax处理XML(二)——基于迭代模型的查找和过滤器的使用
- XML——写出XML文档(XSLT+StAX)
- StAX 生成XML文件
- StAX处理XML
- PHP基础数组操作(二)
- java抽象类
- HDOJ(HDU) 2097 Sky数(进制)
- 并行处理海量数据实验
- AJAX技术入门
- XML之StAX(二)
- oracle学习笔记 Oracle数据库及相关软件的启动和关闭 第一部分
- Fiddler系列之修改host
- HDU 4747 线段树+思维
- linux命令英文缩写的含义(方便记忆)
- Git学习9:Git远程版本库
- 剑指offer(58):链表中环的入口节点
- Linux熟悉命令之路----find命令
- HDU 5606 tree(并查集的应用)