XML之StAX(二)
2016-04-30 15:41
281 查看
XML之StAX(一)
XML之StAX(二)
ATTRIBUTE
CDATA
CHARACTERS
COMMENT
DTD
END_DOCUMENT
END_ELEMENT
ENTITY_DECLARATION
ENTITY_REFERENCE
NAMESPACE
NOTATION_DECLARATION
PROCESSING_INSTRUCTION
SPACE
START_DOCUMENT
START_ELEMENT
下面是一个简单的例子:
和XMLEventReader一样,XMLStreamReader也可以自定义Filter:
完整代码托管在:https://github.com/GatsbyNewton/xml-stax
参考文献:
http://www.w3school.com.cn/xml/index.asp
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_ELEMENT if(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() { @Override public 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
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序