XML--Jaxp-StAX解析(安卓解析xml)

核心類: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();
  
 }
相關文章
相關標籤/搜索