XML--Jaxp-StAX解析(安卓解析xml)
XML--Jaxp-StAX解析(安卓解析xml)
HoneyHoney 发表于3年前
XML--Jaxp-StAX解析(安卓解析xml)
  • 发表于 3年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 读取 封装 生成新的XML(用java写XML)

核心类:

(StreamAPI - CursorAPI)

    1: XMLStreamReader - 用于读取xml文件。
             获取XMLStreamReader - 用XMLInputFactory

    2:XMLStreamWriter-用于写xml文件。

                                                        XMLoutoputfactory

1.解析读取users.xml

@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() 在最后必须向下移动一次

@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>

@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文件

 @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();
  
 }


共有 人打赏支持
粉丝 0
博文 21
码字总数 6313
×
HoneyHoney
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: