(stax) javax.xml.stream 解析xml文件

xml文件如:  

<?xml version="1.0" encoding="utf-8" ?>
<item  name="aaa"  id="2115">  
      <status>1</status>  
       <desc>developer</desc>  
       <users>
               <user> 
                        <name>zhangsan</name>

                       <id>456</id>

                </user>
                <user>
                        <name>lisi</name>

                       <id>789</id>

               </user>  
      </users>  
</item>

說明:以上xml文件格式中,開始元素無所謂,想解析那個元素都可以,重要的是結束元素的確定

              user,item這兩個元素都可以看成是結束元素,這兩者都分別相當於是兩個model類

 public static void main(String[] args) throws IOException,  
          XMLStreamException {  
 
       StaxTest test = new StaxTest();  
       File file = new File("e:\\user.xml");  
       test.readTest(file);  
   }  
 
    public void readTest(File file) throws IOException, XMLStreamException {  
       Long time = null;  
        XMLInputFactory factory = XMLInputFactory.newInstance();   //建立對象
       Reader fileReader = new FileReader(file);   //讀取文件
        factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);  
      XMLStreamReader reader = factory.createXMLStreamReader(fileReader);
      com.text.Item item = null;
      List<User> userList = new ArrayList<User>();
      User user = null;
        try {  
          while(reader.hasNext()){
           int e = reader.next();//取節點標籤是開始標籤還是結束標籤

          //確定是開始節點元素
           if(e == XMLStreamConstants.START_ELEMENT){
            if("item".equalsIgnoreCase(reader.getLocalName())){
             item = new com.text.Item();
             item.setId(reader.getAttributeValue(null, "id"));  //取節點中包含的屬性值
             item.setName(reader.getAttributeValue(null, "name"));
            }
            if("status".equalsIgnoreCase(reader.getLocalName())){
             item.setStatus(reader.getElementText());  //取子節點中的節點值
            }
            if("desc".equalsIgnoreCase(reader.getLocalName())){
             item.setDesc(reader.getElementText());
            }
            if("user".equalsIgnoreCase(reader.getLocalName())){  //每一個user開始標籤,就new一個user對象,然後依次解析user的各個屬性
             user = new User();           
            }
            if("id".equalsIgnoreCase(reader.getLocalName())){
             user.setId(reader.getElementText());
            }
            if("name".equalsIgnoreCase(reader.getLocalName())){
             user.setName(reader.getElementText());
            }
           }

            //確定是節點結束元素
           if(e == XMLStreamConstants.END_ELEMENT){  
            if("user".equalsIgnoreCase(reader.getLocalName())){ //每一個user結束標籤就將整個user節點中包含的user對象加入到集合中去
             userList.add(user);
            }
            if("item".equalsIgnoreCase(reader.getLocalName())){
             item.setUserList(userList);
            }
           }
          }
          System.out.println(item.getId()+":"+item.getName()+":"+item.getStatus()+":"+item.getDesc());
          for(User u:item.getUserList()){
           System.out.println(u.getId()+":"+u.getName());
          }
       } catch(Exception e){
        e.printStackTrace();
       }finally {  
           reader.close();  
        }  
    }  

 

 

實體類:item和user:

package com.text;

import java.util.List;

public class Item {
 public String name;
 public String id;
 public String status;
 public String desc;
 public List<User> userList;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public List<User> getUserList() {
  return userList;
 }
 public void setUserList(List<User> userList) {
  this.userList = userList;
 }
 public String getStatus() {
  return status;
 }
 public void setStatus(String status) {
  this.status = status;
 }
 public String getDesc() {
  return desc;
 }
 public void setDesc(String desc) {
  this.desc = desc;
 }
 
}

 

 

 

package com.text;

public class User {
 public String id;
 public String name;
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
}

 

 

 

整個解析過程就是:讀取xml文件,依次讀取元素標籤,標籤分兩種,開始標記和結束標記,碰到開始標記就到開始狀態的處理中進行處理,

碰到結束標記就道結束狀態中處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章