核心类:java
(StreamAPI - CursorAPI)spa
1: XMLStreamReader - 用于读取xml文件。
获取XMLStreamReader - 用XMLInputFactorycode
2:XMLStreamWriter-用于写xml文件。xml
XMLoutoputfactory对象
1.解析读取users.xmlget
@Test public void test1() throws Exception { //获取redaer对象用于解析xml文件 XMLInputFactory xif = XMLInputFactory.newInstance(); XMLStreamReader reader = xif.createXMLStreamReader(new FileReader( "./files/users.xml")); //对于reader来讲,与sax解析的方式同样,用int的方式来判断是否有元素的某个标记 int type = reader.next();//读取xml中的第一个节点 while(type!=XMLStreamReader.END_DOCUMENT){//判断不是文件的最后 //能够再次的对type作一个判断 if(type==XMLStreamReader.START_ELEMENT){ //获取元素的名称 String qName = reader.getLocalName(); //判断是不是user节点 if(qName.equals("user")){ //获取属性 String id = reader.getAttributeValue(0); System.err.println(id); }else if(qName.equals("name")){ String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素 System.err.println(name); }else if(qName.equals("age")){ String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素 System.err.println(age); } } //必需要向下再移动一次 type=reader.next(); } } }
如下代码相同,只是while内的条件不同,上面的是reader.next() 在最后必须向下移动一次it
@Test public void test2() throws Exception { System.err.println("第二种方式"); XMLInputFactory xif = XMLInputFactory.newInstance(); XMLStreamReader reader = xif.createXMLStreamReader(new FileReader("./files/users.xml")); while(reader.hasNext()){//判断还有下一个元素 int type = reader.next(); if(type==XMLStreamReader.START_ELEMENT){ String qName = reader.getLocalName(); if(qName.equals("user")){ //获取属性 String id = reader.getAttributeValue(0); System.err.println(id); }else if(qName.equals("name")){ String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素 System.err.println(name); }else if(qName.equals("age")){ String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素 System.err.println(age); } } } }
2.封装成List<User>io
@Test public void test2() throws Exception { List<User> list = new ArrayList<User>(); XMLInputFactory xif = XMLInputFactory.newInstance(); XMLStreamReader reader = xif.createXMLStreamReader(new FileReader( "./files/users.xml")); User user = null; while(reader.hasNext()){//判断还有下一个元素 int type = reader.next(); if(type==XMLStreamReader.START_ELEMENT){ String qName = reader.getLocalName(); if(qName.equals("user")){ //获取属性 String id = reader.getAttributeValue(0); user=new User(); user.setId(id); }else if(qName.equals("name")){ String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素 user.setName(name); }else if(qName.equals("age")){ String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素 user.setAge(Integer.valueOf(age)); } }else if(type==XMLStreamReader.END_ELEMENT){ String qName = reader.getLocalName(); if(qName.equals("user")){ list.add(user); } } } System.err.println("封装的结果为:"+users); }
3.生成一个新的xml文件-——XMLStreamWriter - 用于生成xml文件class
@Test public void test3() throws Exception { // 生成一个新的xml文件 XMLOutputFactory out = XMLOutputFactory.newInstance(); XMLStreamWriter writer = out.createXMLStreamWriter(new FileOutputStream("./files/a.xml")); //写xml的头<?xml v e ?> writer.writeStartDocument("UTF-8","1.0"); writer.writeStartElement("users"); writer.writeStartElement("user"); writer.writeAttribute("id", "UU001"); writer.writeStartElement("name"); writer.writeCharacters("张三李四"); writer.writeEndElement(); writer.writeStartElement("age"); writer.writeCharacters("99"); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndElement(); writer.writeEndDocument(); }