核心類: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(); }